private async void simpleButton1_Click(object sender, EventArgs e) { if (!Directory.Exists(beDest.Text)) { MessageBox.Show("The target directory does not exist."); return; } var schemaSwagger = await SwaggerDocument.FromUrlAsync(meURL.Text); TypeScriptGeneratorSettings tsGenSettings = new TypeScriptGeneratorSettings() { ConvertConstructorInterfaceData = true, TypeStyle = TypeScriptTypeStyle.KnockoutClass, MarkOptionalProperties = true, GenerateDefaultValues = false, PropertyNameGenerator = new myPropertyNameGenerator(), TypeNameGenerator = new myTypeNameGenerator(), TypeScriptVersion = 2.4m }; var _resolver = new TypeScriptTypeResolver(tsGenSettings); _resolver.RegisterSchemaDefinitions(schemaSwagger.Definitions); var generatorJ = new TypeScriptGenerator(schemaSwagger, tsGenSettings, _resolver); var typeDef = generatorJ.GenerateTypes(); foreach (CodeArtifact codeArtifact in typeDef.Artifacts) { File.WriteAllText(Path.Combine(beDest.Text, codeArtifact.TypeName + ".ts"), meFileHeader.Text + "\n\n" + codeArtifact.Code); } }
public void When_schema_has_default_value_of_enum_it_is_generated_in_CSharp_and_TypeScript_correctly() { //// Arrange var csharpSettings = new CSharpGeneratorSettings { EnumNameGenerator = new MyEnumNameGenerator(), Namespace = "Ns" }; var csharpGenerator = new CSharpValueGenerator(csharpSettings); var csharpTypeResolver = new CSharpTypeResolver(csharpSettings); //// Act var schema = new JsonSchema4() { Type = JsonObjectType.String, Enumeration = { "Foo", "Bar" }, Default = "Bar" }; var typescriptSettings = new TypeScriptGeneratorSettings { EnumNameGenerator = new MyEnumNameGenerator() }; var typescriptGenerator = new TypeScriptValueGenerator(typescriptSettings); var typescriptTypeResolver = new TypeScriptTypeResolver(typescriptSettings); var csharpValue = csharpGenerator.GetDefaultValue(schema, true, "MyEnum", "MyEnum", true, csharpTypeResolver); var typescriptValue = typescriptGenerator.GetDefaultValue(schema, true, "MyEnum", "MyEnum", true, typescriptTypeResolver); //// Assert Assert.Equal("Ns.MyEnum.bar", csharpValue); Assert.Equal("MyEnum.bar", typescriptValue); }
public IEnumerable <CodeArtifact> GenerateArtifacts(SigSpecDocument document) { var resolver = new TypeScriptTypeResolver(this._settings.TypeScriptGeneratorSettings); resolver.RegisterSchemaDefinitions(document.Definitions); var artifacts = new List <CodeArtifact>(); foreach (var hub in document.Hubs) { var hubModel = new HubModel(hub.Key, hub.Value, resolver); var template = this._settings.TypeScriptGeneratorSettings.TemplateFactory.CreateTemplate("TypeScript", "Hub", hubModel); artifacts.Add(new CodeArtifact(hubModel.Name, CodeArtifactType.Class, CodeArtifactLanguage.TypeScript, CodeArtifactCategory.Client, template)); } if (this._settings.GenerateDtoTypes) { var generator = new TypeScriptGenerator(document, this._settings.TypeScriptGeneratorSettings, resolver); var types = generator.GenerateTypes(); return(artifacts.Concat(types)); } else { return(artifacts); } }
public CodeArtifactCollection GenerateArtifacts(SigSpecDocument document) { var resolver = new TypeScriptTypeResolver(_settings.TypeScriptGeneratorSettings); resolver.RegisterSchemaDefinitions(document.Definitions); var artifacts = new List <CodeArtifact>(); foreach (var hub in document.Hubs) { var hubModel = new HubModel(hub.Key, hub.Value, resolver); var template = _settings.TypeScriptGeneratorSettings.TemplateFactory.CreateTemplate("TypeScript", "Hub", hubModel); artifacts.Add(new CodeArtifact(hubModel.Name, CodeArtifactType.Class, CodeArtifactLanguage.TypeScript, template)); } if (_settings.GenerateDtoTypes) { var generator = new TypeScriptGenerator(document, _settings.TypeScriptGeneratorSettings, resolver); var types = generator.GenerateTypes(); return(new CodeArtifactCollection(artifacts.Concat(types.Artifacts), types.ExtensionCode)); } else { var extensionCode = new TypeScriptExtensionCode(_settings.TypeScriptGeneratorSettings.ExtensionCode, _settings.TypeScriptGeneratorSettings.ExtendedClasses); return(new CodeArtifactCollection(artifacts, extensionCode)); } }
/// <summary>Initializes a new instance of the <see cref="ClassTemplateModel" /> class.</summary> /// <param name="typeName">The type name.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> /// <param name="schema">The schema.</param> /// <param name="rootObject">The root object.</param> public ClassTemplateModel(string typeName, TypeScriptGeneratorSettings settings, TypeScriptTypeResolver resolver, JsonSchema4 schema, object rootObject) { _typeName = typeName; _settings = settings; _schema = schema; _rootObject = rootObject; _resolver = resolver; }
/// <summary>Initializes a new instance of the <see cref="PropertyModel"/> class.</summary> /// <param name="classTemplateModel">The class template model.</param> /// <param name="property">The property.</param> /// <param name="parentTypeName">Name of the parent type.</param> /// <param name="resolver">The resolver.</param> /// <param name="settings">The settings.</param> public PropertyModel(ClassTemplateModel classTemplateModel, JsonProperty property, string parentTypeName, TypeScriptTypeResolver resolver, TypeScriptGeneratorSettings settings) : base(property, classTemplateModel, new TypeScriptValueGenerator(resolver, settings), settings) { _property = property; _resolver = resolver; _parentTypeName = parentTypeName; _settings = settings; }
/// <summary>Initializes a new instance of the <see cref="TypeScriptParameterModel" /> class.</summary> /// <param name="parameterName">Name of the parameter.</param> /// <param name="variableName">Name of the variable.</param> /// <param name="typeName">The type name.</param> /// <param name="parameter">The parameter.</param> /// <param name="allParameters">All parameters.</param> /// <param name="settings">The settings.</param> /// <param name="generator">The client generator base.</param> /// <param name="resolver">The resolver.</param> public TypeScriptParameterModel(string parameterName, string variableName, string typeName, SwaggerParameter parameter, IList <SwaggerParameter> allParameters, SwaggerToTypeScriptClientGeneratorSettings settings, SwaggerToTypeScriptClientGenerator generator, TypeScriptTypeResolver resolver) : base(parameterName, variableName, typeName, parameter, allParameters, settings.TypeScriptGeneratorSettings, generator) { _settings = settings; _resolver = resolver; }
public PropertyModel(JsonProperty property, string parentTypeName, TypeScriptTypeResolver resolver, TypeScriptGeneratorSettings settings) : base(property, new DefaultValueGenerator(resolver), settings) { _property = property; _resolver = resolver; _parentTypeName = parentTypeName; _settings = settings; }
/// <summary>Initializes a new instance of the <see cref="FileTemplateModel"/> class.</summary> /// <param name="clientCode">The client code.</param> /// <param name="clientClasses">The client classes.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> public FileTemplateModel(string clientCode, IEnumerable <string> clientClasses, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) { _settings = settings; _resolver = resolver; _clientCode = clientCode; ClientClasses = clientClasses.ToArray(); Types = GenerateDtoTypes(); ExtensionCodeAfter = GenerateExtensionCodeAfter(); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptGenerator"/> class.</summary> /// <param name="service">The service.</param> /// <exception cref="ArgumentNullException"><paramref name="service"/> is <see langword="null" />.</exception> public SwaggerToTypeScriptGenerator(SwaggerService service) { if (service == null) throw new ArgumentNullException("service"); Class = "Client"; AsyncType = TypeScriptAsyncType.Callbacks; _service = service; _resolver = new TypeScriptTypeResolver(_service.Definitions.Select(p => p.Value).ToArray()); }
/// <summary>Initializes a new instance of the <see cref="ClassTemplateModel" /> class.</summary> /// <param name="typeName">The type name.</param> /// <param name="discriminatorName">The name to compare the discriminator against.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> /// <param name="schema">The schema.</param> /// <param name="rootObject">The root object.</param> public ClassTemplateModel(string typeName, string discriminatorName, TypeScriptGeneratorSettings settings, TypeScriptTypeResolver resolver, JsonSchema4 schema, object rootObject) : base(resolver, schema, rootObject) { _settings = settings; _schema = schema; _resolver = resolver; ClassName = typeName; DiscriminatorName = discriminatorName; }
/// <summary>Initializes a new instance of the <see cref="FileTemplateModel" /> class.</summary> /// <param name="document">The Swagger document.</param> /// <param name="clientCode">The client code.</param> /// <param name="clientClasses">The client classes.</param> /// <param name="settings">The settings.</param> /// <param name="extensionCode">The extension code.</param> /// <param name="resolver">The resolver.</param> public FileTemplateModel(SwaggerDocument document, string clientCode, IEnumerable<string> clientClasses, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptExtensionCode extensionCode, TypeScriptTypeResolver resolver) { _document = document; _extensionCode = extensionCode; _settings = settings; _resolver = resolver; _clientCode = clientCode; ClientClasses = clientClasses.ToArray(); Types = GenerateDtoTypes(); ExtensionCodeBottom = GenerateExtensionCodeAfter(); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptGenerator" /> class.</summary> /// <param name="service">The service.</param> /// <param name="settings">The settings.</param> /// <exception cref="System.ArgumentNullException">service</exception> /// <exception cref="ArgumentNullException"><paramref name="service" /> is <see langword="null" />.</exception> public SwaggerToTypeScriptGenerator(SwaggerService service, SwaggerToTypeScriptGeneratorSettings settings) { if (service == null) throw new ArgumentNullException("service"); Settings = settings; _service = service; foreach (var definition in _service.Definitions) definition.Value.TypeName = definition.Key; _resolver = new TypeScriptTypeResolver(_service.Definitions.Select(p => p.Value).ToArray()); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptClientGenerator" /> class.</summary> /// <param name="document">The Swagger document.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> /// <exception cref="ArgumentNullException"><paramref name="document" /> is <see langword="null" />.</exception> public SwaggerToTypeScriptClientGenerator(SwaggerDocument document, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) : base(document, settings.CodeGeneratorSettings, resolver) { Settings = settings; _document = document ?? throw new ArgumentNullException(nameof(document)); _resolver = resolver; _resolver.RegisterSchemaDefinitions(_document.Definitions); _extensionCode = new TypeScriptExtensionCode( Settings.TypeScriptGeneratorSettings.ExtensionCode, (Settings.TypeScriptGeneratorSettings.ExtendedClasses ?? new string[] { }).Concat(new[] { Settings.ConfigurationClass }).ToArray(), new[] { Settings.ClientBaseClass }); }
public static void GenerateTS(SwaggerDocument document, ApiClientDefinition definition, bool promptOnFileOverwrite) { var className = Path.GetFileNameWithoutExtension(definition.TypescriptClient); var settings = new SwaggerToTypeScriptClientGeneratorSettings() { Template = TypeScriptTemplate.Fetch, OperationNameGenerator = new CustomOperationNameGenerator(), GenerateOptionalParameters = true, UseTransformOptionsMethod = true, ClientBaseClass = "ClientBase", TypeScriptGeneratorSettings = { PropertyNameGenerator = new CustomPropertyNameGenerator(c => c), NullValue = TypeScriptNullValue.Null } }; if (definition.IsSingleClient) { // set the class name only when Swagger generates one client, otherwise all classes would have the same name settings.ClassName = className; } settings.TypeScriptGeneratorSettings.TemplateFactory = new DotvvmClientTemplateFactory(settings.CodeGeneratorSettings, new[] { typeof(TypeScriptGeneratorSettings).Assembly, typeof(SwaggerToTypeScriptClientGeneratorSettings).Assembly }); var resolver = new TypeScriptTypeResolver(settings.TypeScriptGeneratorSettings); var generator = new DotvvmSwaggerToTypeScriptClientGenerator(document, settings, resolver); var ts = generator.GenerateFile(); var baseClass = definition.CreateBaseClass(); ts = definition.WrapInNamespace(ts, baseClass); FileSystemHelpers.WriteFile(definition.TypescriptClient, ts, promptOnFileOverwrite); if (definition.CompileTypescript) { Process.Start(new ProcessStartInfo() { FileName = "tsc", Arguments = definition.TypescriptClient, UseShellExecute = true, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden }).WaitForExit(); } }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptGenerator"/> class.</summary> /// <param name="service">The service.</param> /// <exception cref="ArgumentNullException"><paramref name="service"/> is <see langword="null" />.</exception> public SwaggerToTypeScriptGenerator(SwaggerService service) { if (service == null) throw new ArgumentNullException("service"); Class = "{controller}Client"; AsyncType = TypeScriptAsyncType.Callbacks; _service = service; foreach (var definition in _service.Definitions) definition.Value.TypeName = definition.Key; _resolver = new TypeScriptTypeResolver(_service.Definitions.Select(p => p.Value).ToArray()); }
/// <summary>Initializes a new instance of the <see cref="ClassTemplateModel" /> class.</summary> /// <param name="typeName">The type name.</param> /// <param name="discriminatorName">The name to compare the discriminator against.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> /// <param name="schema">The schema.</param> /// <param name="rootObject">The root object.</param> public ClassTemplateModel(string typeName, string discriminatorName, TypeScriptGeneratorSettings settings, TypeScriptTypeResolver resolver, JsonSchema schema, object rootObject) : base(resolver, schema, rootObject) { _settings = settings; _schema = schema; _resolver = resolver; _discriminatorName = discriminatorName; ClassName = typeName; Properties = _schema.ActualProperties.Values .Where(v => v.IsInheritanceDiscriminator == false) .Select(property => new PropertyModel(this, property, ClassName, _resolver, _settings)) .ToList(); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptClientGenerator" /> class.</summary> /// <param name="document">The Swagger document.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> /// <exception cref="ArgumentNullException"><paramref name="document" /> is <see langword="null" />.</exception> public SwaggerToTypeScriptClientGenerator(SwaggerDocument document, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) : base(resolver, settings.CodeGeneratorSettings) { if (document == null) throw new ArgumentNullException(nameof(document)); Settings = settings; _document = document; _resolver = resolver; _resolver.AddGenerators(_document.Definitions); _extensionCode = new TypeScriptExtensionCode( Settings.TypeScriptGeneratorSettings.ExtensionCode, Settings.TypeScriptGeneratorSettings.ExtendedClasses, new[] { Settings.ClientBaseClass }); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptGenerator" /> class.</summary> /// <param name="service">The service.</param> /// <param name="settings">The settings.</param> /// <exception cref="System.ArgumentNullException">service</exception> /// <exception cref="ArgumentNullException"><paramref name="service" /> is <see langword="null" />.</exception> public SwaggerToTypeScriptGenerator(SwaggerService service, SwaggerToTypeScriptGeneratorSettings settings) { if (service == null) { throw new ArgumentNullException("service"); } Settings = settings; _service = service; foreach (var definition in _service.Definitions) { definition.Value.TypeName = definition.Key; } _resolver = new TypeScriptTypeResolver(_service.Definitions.Select(p => p.Value).ToArray()); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptClientGenerator" /> class.</summary> /// <param name="service">The service.</param> /// <param name="settings">The settings.</param> /// <exception cref="System.ArgumentNullException">service</exception> /// <exception cref="ArgumentNullException"><paramref name="service" /> is <see langword="null" />.</exception> public SwaggerToTypeScriptClientGenerator(SwaggerService service, SwaggerToTypeScriptClientGeneratorSettings settings) { if (service == null) { throw new ArgumentNullException(nameof(service)); } Settings = settings; _service = service; foreach (var definition in _service.Definitions.Where(p => string.IsNullOrEmpty(p.Value.TypeNameRaw))) { definition.Value.TypeNameRaw = definition.Key; } _resolver = new TypeScriptTypeResolver(_service.Definitions.Select(p => p.Value).ToArray(), Settings.TypeScriptGeneratorSettings); }
/// <summary>Initializes a new instance of the <see cref="TypeScriptFileTemplateModel" /> class.</summary> /// <param name="clientCode">The client code.</param> /// <param name="clientClasses">The client classes.</param> /// <param name="document">The Swagger document.</param> /// <param name="extensionCode">The extension code.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> public TypeScriptFileTemplateModel( string clientCode, IEnumerable <string> clientClasses, SwaggerDocument document, TypeScriptExtensionCode extensionCode, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) { _document = document; _extensionCode = extensionCode; _settings = settings; _resolver = resolver; _clientCode = clientCode; ClientClasses = clientClasses.ToArray(); Types = GenerateDtoTypes(); ExtensionCodeBottom = GenerateExtensionCodeAfter(); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptClientGenerator" /> class.</summary> /// <param name="document">The Swagger document.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> /// <exception cref="ArgumentNullException"><paramref name="document" /> is <see langword="null" />.</exception> public SwaggerToTypeScriptClientGenerator(SwaggerDocument document, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) : base(resolver, settings.CodeGeneratorSettings) { if (document == null) { throw new ArgumentNullException(nameof(document)); } Settings = settings; _document = document; _resolver = resolver; _resolver.AddGenerators(_document.Definitions); _extensionCode = new TypeScriptExtensionCode( Settings.TypeScriptGeneratorSettings.ExtensionCode, Settings.TypeScriptGeneratorSettings.ExtendedClasses, new[] { Settings.ClientBaseClass }); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptGenerator"/> class.</summary> /// <param name="service">The service.</param> /// <exception cref="ArgumentNullException"><paramref name="service"/> is <see langword="null" />.</exception> public SwaggerToTypeScriptGenerator(SwaggerService service) { if (service == null) { throw new ArgumentNullException("service"); } Class = "{controller}Client"; AsyncType = TypeScriptAsyncType.Callbacks; _service = service; foreach (var definition in _service.Definitions) { definition.Value.TypeName = definition.Key; } _resolver = new TypeScriptTypeResolver(_service.Definitions.Select(p => p.Value).ToArray()); }
public void When_schema_has_default_value_of_double_without_format_it_is_generated_in_CSharp_and_TypeScript_correctly() { //// Arrange //// Act var schema = new JsonSchema4() { Type = JsonObjectType.Number, Default = 1234.567F }; var typescriptTypeResolver = new TypeScriptTypeResolver(_typescriptSettings); var csharpValue = _csharpGenerator.GetDefaultValue(schema, true, "double", "double", true, _csharpTypeResolver); var typescriptValue = _typescriptGenerator.GetDefaultValue(schema, true, "double", "double", true, typescriptTypeResolver); //// Assert Assert.Equal("1234.567D", csharpValue); Assert.Equal("1234.567", typescriptValue); }
public void When_schema_has_default_value_of_int_it_is_generated_in_CSharp_and_TypeScript_correctly() { //// Arrange //// Act var schema = new JsonSchema4() { Type = JsonObjectType.Integer, Default = (int)6 }; var typescriptTypeResolver = new TypeScriptTypeResolver(_typescriptSettings); var csharpValue = _csharpGenerator.GetDefaultValue(schema, true, "int", "int", true, _csharpTypeResolver); var typescriptValue = _typescriptGenerator.GetDefaultValue(schema, true, "int", "int", true, typescriptTypeResolver); //// Assert Assert.Equal("6", csharpValue); Assert.Equal("6", typescriptValue); }
public SelfTypeScriptGenerator(TypeScriptClientGeneratorSettings clientGeneratorSettings, OpenApiDocument openApiDocument) { _clientGeneratorSettings = clientGeneratorSettings; if (_clientGeneratorSettings.ExcludedParameterNames == null) { _clientGeneratorSettings.ExcludedParameterNames = new string[0]; } Constant.TsBaseType.AddRange(_clientGeneratorSettings.ExcludedParameterNames); _resolver = new TypeScriptTypeResolver(clientGeneratorSettings.TypeScriptGeneratorSettings); _openApiDocument = openApiDocument; _resolver.RegisterSchemaDefinitions(_openApiDocument.Definitions); _typeScriptClientGenerator = new TypeScriptClientGenerator(_openApiDocument, _clientGeneratorSettings, _resolver); _extensionCode = new TypeScriptExtensionCode( clientGeneratorSettings.TypeScriptGeneratorSettings.ExtensionCode, (clientGeneratorSettings.TypeScriptGeneratorSettings.ExtendedClasses ?? new string[] { }) .Concat(new[] { clientGeneratorSettings.ConfigurationClass }).ToArray(), new[] { clientGeneratorSettings.ClientBaseClass }); }
public void When_schema_has_default_value_of_string_it_is_generated_in_CSharp_and_TypeScript_correctly() { //// Arrange //// Act var schema = new JsonSchema4() { Type = JsonObjectType.String, Default = "test\\test\"test\r\ntest" }; var typescriptTypeResolver = new TypeScriptTypeResolver(_typescriptSettings); var csharpValue = _csharpGenerator.GetDefaultValue(schema, true, "string", "string", true, _csharpTypeResolver); var typescriptValue = _typescriptGenerator.GetDefaultValue(schema, true, "string", "string", true, typescriptTypeResolver); //// Assert Assert.Equal("\"test\\\\test\\\"test\\r\\ntest\"", csharpValue); Assert.Equal("\"test\\\\test\\\"test\\r\\ntest\"", typescriptValue); }
/// <summary>Initializes a new instance of the <see cref="SwaggerToTypeScriptClientGenerator" /> class.</summary> /// <param name="service">The service.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> /// <exception cref="System.ArgumentNullException">service</exception> /// <exception cref="ArgumentNullException"><paramref name="service" /> is <see langword="null" />.</exception> public SwaggerToTypeScriptClientGenerator(SwaggerService service, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) : base(resolver, settings.CodeGeneratorSettings) { if (service == null) { throw new ArgumentNullException(nameof(service)); } Settings = settings; _service = service; _resolver = resolver; foreach (var definition in _service.Definitions.Where(p => string.IsNullOrEmpty(p.Value.TypeNameRaw))) { definition.Value.TypeNameRaw = definition.Key; } _resolver.AddSchemas(_service.Definitions); }
/// <summary>Initializes a new instance of the <see cref="TypeScriptFileTemplateModel" /> class.</summary> /// <param name="clientTypes">The client types.</param> /// <param name="dtoTypes">The DTO types.</param> /// <param name="document">The Swagger document.</param> /// <param name="extensionCode">The extension code.</param> /// <param name="settings">The settings.</param> /// <param name="resolver">The resolver.</param> public TypeScriptFileTemplateModel( IEnumerable <CodeArtifact> clientTypes, IEnumerable <CodeArtifact> dtoTypes, OpenApiDocument document, TypeScriptExtensionCode extensionCode, TypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) { _document = document; _extensionCode = extensionCode; _settings = settings; _resolver = resolver; _clientCode = clientTypes.OrderByBaseDependency().Concatenate(); _clientTypes = clientTypes; Types = dtoTypes.OrderByBaseDependency().Concatenate(); ExtensionCodeBottom = GenerateExtensionCodeAfter(); Framework = new TypeScriptFrameworkModel(settings); }
public static void GenerateTS(SwaggerDocument document, ApiClientDefinition definition) { var settings = new SwaggerToTypeScriptClientGeneratorSettings() { Template = TypeScriptTemplate.Fetch, OperationNameGenerator = new CustomOperationNameGenerator(), GenerateOptionalParameters = true, UseTransformOptionsMethod = true, ClientBaseClass = "ClientBase", TypeScriptGeneratorSettings = { PropertyNameGenerator = new CustomPropertyNameGenerator(c => c), NullValue = TypeScriptNullValue.Null } }; settings.TypeScriptGeneratorSettings.TemplateFactory = new DotvvmClientTemplateFactory(settings.CodeGeneratorSettings, new[] { typeof(TypeScriptGeneratorSettings).Assembly, typeof(SwaggerToTypeScriptClientGeneratorSettings).Assembly }); var resolver = new TypeScriptTypeResolver(settings.TypeScriptGeneratorSettings); var generator = new DotvvmSwaggerToTypeScriptClientGenerator(document, settings, resolver); var ts = generator.GenerateFile(); var baseClass = definition.CreateBaseClass(); ts = definition.WrapInNamespace(ts, baseClass); File.WriteAllText(definition.TypescriptClient, ts); if (definition.CompileTypescript) { Process.Start(new ProcessStartInfo() { FileName = "tsc", Arguments = definition.TypescriptClient, UseShellExecute = true, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden }).WaitForExit(); } }
public void When_schema_has_default_value_of_long_it_is_generated_in_CSharp_and_TypeScript_correctly() { //// Arrange //// Act var schema = new JsonSchema() { Type = JsonObjectType.Integer, Format = JsonFormatStrings.Long, Default = 6000000000L }; var typescriptTypeResolver = new TypeScriptTypeResolver(_typescriptSettings); var csharpValue = _csharpGenerator.GetDefaultValue(schema, true, "long", "long", true, _csharpTypeResolver); var typescriptValue = _typescriptGenerator.GetDefaultValue(schema, true, "long", "long", true, typescriptTypeResolver); //// Assert Assert.Equal("6000000000L", csharpValue); Assert.Equal("6000000000", typescriptValue); }
public PropertyModel(JsonProperty property, TypeScriptTypeResolver resolver, TypeScriptGeneratorSettings settings, TypeScriptGenerator generator) : base(property) { var propertyName = ConversionUtilities.ConvertToLowerCamelCase(property.Name).Replace("-", "_"); Name = property.Name; InterfaceName = property.Name.Contains("-") ? '\"' + property.Name + '\"' : property.Name; PropertyName = propertyName; Type = resolver.Resolve(property.ActualPropertySchema, property.IsNullable, property.Name); DataConversionCode = settings.TypeStyle == TypeScriptTypeStyle.Interface ? string.Empty : generator.GenerateDataConversion( settings.TypeStyle == TypeScriptTypeStyle.Class ? "this." + propertyName : propertyName, "data[\"" + property.Name + "\"]", property.ActualPropertySchema, property.IsNullable, property.Name); Description = property.Description; HasDescription = !string.IsNullOrEmpty(property.Description); IsArray = property.ActualPropertySchema.Type.HasFlag(JsonObjectType.Array); ArrayItemType = resolver.TryResolve(property.ActualPropertySchema.Item, property.Name); IsReadOnly = property.IsReadOnly && settings.GenerateReadOnlyKeywords; IsOptional = !property.IsRequired; }
public static TypeScriptClassDefinition RefactClass(this object obj, string name = null, ICodeNamingConvention namingConvention = null, bool convertPropertiesToFields = true) { var sourceType = obj.GetType(); var classDefinition = new TypeScriptClassDefinition { Name = string.IsNullOrEmpty(name) ? sourceType.Name : name }; if (namingConvention == null) { namingConvention = new TypeScriptNamingConvention(); } foreach (var property in sourceType.GetProperties().Where(item => item.CanRead)) { var type = TypeScriptTypeResolver.Resolve(property.PropertyType.Name); var fieldName = string.Format("m_{0}", namingConvention.GetFieldName(property.Name)); if (convertPropertiesToFields) { classDefinition.Fields.Add(new FieldDefinition(AccessModifier.Public, type, namingConvention.GetPropertyName(property.Name))); } else { classDefinition.Fields.Add(new FieldDefinition(AccessModifier.Private, type, fieldName)); classDefinition.Properties.Add(new PropertyDefinition(AccessModifier.Public, type, namingConvention.GetPropertyName(property.Name)) { IsAutomatic = true }); } } return(classDefinition); }
/// <summary>Initializes a new instance of the <see cref="TypeScriptGenerator"/> class.</summary> /// <param name="schema">The schema.</param> /// <param name="resolver">The resolver.</param> public TypeScriptGenerator(JsonSchema4 schema, TypeScriptTypeResolver resolver) { _schema = schema; _resolver = resolver; }
public async Task CreateClient(TextWriter writer) { var interfacesToWrite = new InterfaceManager(); writer.WriteLine( @"import * as hal from 'htmlrapier.halcyon/src/EndpointClient'; import { Fetcher } from 'htmlrapier/src/fetcher';" ); await WriteClient(interfacesToWrite, writer); //Write interfaces, kind of weird, no good docs for this var settings = new TypeScriptGeneratorSettings() { TypeStyle = TypeScriptTypeStyle.Interface, ForceAllPropertiesOptional = true, DateTimeType = TypeScriptDateTimeType.String, EnumNameGenerator = new EnumValueEnumNameGenerator(), }; //Gather up everything to write, skip duplicate instances of the same thing Dictionary <String, CodeArtifact> codeArtifacts = new Dictionary <String, CodeArtifact>(); ExtensionCode lastExtensionCode = null; foreach (var item in interfacesToWrite.Interfaces) { //Remove any properties from item that are hal embeds var propertiesToRemove = item.Value.Properties.Where(i => i.Value.IsHalEmbedded()).ToList(); foreach (var remove in propertiesToRemove) { item.Value.Properties.Remove(remove.Key); } var resolver = new TypeScriptTypeResolver(settings); resolver.RegisterSchemaDefinitions(new Dictionary <String, JsonSchema4>() { { item.Key, item.Value } }); //Add all discovered generators var generator = new TypeScriptGenerator(item.Value, settings, resolver); var artifacts = generator.GenerateTypes(); foreach (var artifact in artifacts.Artifacts) { if (!codeArtifacts.ContainsKey(artifact.TypeName)) { codeArtifacts.Add(artifact.TypeName, artifact); } } lastExtensionCode = artifacts.ExtensionCode; } //Write the classes officially //From TypeScriptGenerator.cs GenerateFile, (NJsonSchema 9.10.49) var model = new FileTemplateModel(settings) { Types = ConversionUtilities.TrimWhiteSpaces(string.Join("\n\n", CodeArtifactCollection.OrderByBaseDependency(codeArtifacts.Values).Select(p => p.Code))), ExtensionCode = (TypeScriptExtensionCode)lastExtensionCode }; var template = settings.TemplateFactory.CreateTemplate("TypeScript", "File", model); var classes = ConversionUtilities.TrimWhiteSpaces(template.Render()); writer.WriteLine(classes); //Write out common interfaces we reuse in all clients writer.WriteLine(@" export interface HalEndpointDocQuery { includeRequest?: boolean; includeResponse?: boolean; }"); //End Write Interfaces }
public DotvvmSwaggerToTypeScriptClientGenerator(SwaggerDocument document, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) : base(document, settings, resolver) { this.resolver = resolver; }
/// <summary>Initializes a new instance of the <see cref="TypeScriptGenerator"/> class.</summary> /// <param name="schema">The schema.</param> /// <param name="settings">The generator settings.</param> /// <param name="resolver">The resolver.</param> public TypeScriptGenerator(JsonSchema4 schema, TypeScriptGeneratorSettings settings, TypeScriptTypeResolver resolver) { _schema = schema; _resolver = resolver; Settings = settings; }