Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 4
0
        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));
            }
        }
Exemplo n.º 5
0
 /// <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;
 }
Exemplo n.º 6
0
 /// <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;
 }
Exemplo n.º 7
0
 /// <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;
 }
Exemplo n.º 8
0
 public PropertyModel(JsonProperty property, string parentTypeName, TypeScriptTypeResolver resolver, TypeScriptGeneratorSettings settings)
     : base(property, new DefaultValueGenerator(resolver), settings)
 {
     _property       = property;
     _resolver       = resolver;
     _parentTypeName = parentTypeName;
     _settings       = settings;
 }
Exemplo n.º 9
0
        /// <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());
        }
Exemplo n.º 11
0
        /// <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;
        }
Exemplo n.º 12
0
        /// <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();
        }
Exemplo n.º 13
0
        /// <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());
        }
Exemplo n.º 14
0
        /// <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 });
        }
Exemplo n.º 15
0
        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();
            }
        }
Exemplo n.º 16
0
        /// <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());
        }
Exemplo n.º 17
0
        /// <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 });
        }
Exemplo n.º 19
0
        /// <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);
        }
Exemplo n.º 21
0
        /// <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();
        }
Exemplo n.º 22
0
        /// <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 });
        }
Exemplo n.º 23
0
        /// <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);
        }
Exemplo n.º 26
0
 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);
        }
Exemplo n.º 28
0
        /// <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);
        }
Exemplo n.º 29
0
        /// <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);
        }
Exemplo n.º 30
0
        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();
            }
        }
Exemplo n.º 31
0
        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);
        }
Exemplo n.º 32
0
        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;
        }
Exemplo n.º 33
0
        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);
        }
Exemplo n.º 34
0
 /// <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
        }
Exemplo n.º 36
0
 public DotvvmSwaggerToTypeScriptClientGenerator(SwaggerDocument document, SwaggerToTypeScriptClientGeneratorSettings settings, TypeScriptTypeResolver resolver) : base(document, settings, resolver)
 {
     this.resolver = resolver;
 }
Exemplo n.º 37
0
 /// <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;
 }