示例#1
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));
            }
        }
示例#2
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);
            }
        }
示例#3
0
        public async Task When_class_has_baseclass_and_extension_code_baseclass_is_preserved()
        {
            //// Arrange
            string extensionCode = @"
import * as generated from ""./generated"";

export class ExceptionBase extends generated.ExceptionBase {
    xyz: boolean; 
}
            ";

            var schema    = JsonSchema.FromType <ExceptionContainer>();
            var generator = new TypeScriptGenerator(schema, new TypeScriptGeneratorSettings {
                ExtensionCode   = extensionCode,
                ExtendedClasses = new[] { "ExceptionBase" },
            });

            //// Act
            var output = generator.GenerateTypes(schema, null);

            //// Assert
            var outputArray = output.ToArray();

            Assert.Equal(4, outputArray.Length);

            Assert.Equal("Exception", outputArray[0].BaseTypeName);
            Assert.Contains("xyz: boolean", outputArray[0].Code);
        }
        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);
            }
        }
示例#5
0
        private string GenerateDtoTypes()
        {
            var generator = new TypeScriptGenerator(_document, _settings.TypeScriptGeneratorSettings, _resolver);

            return(_settings.GenerateDtoTypes ? generator.GenerateTypes(_extensionCode).Concatenate() : string.Empty);
        }
示例#6
0
        /// <summary>Generates all DTO types.</summary>
        /// <returns>The code artifact collection.</returns>
        protected override IEnumerable <CodeArtifact> GenerateDtoTypes()
        {
            var generator = new TypeScriptGenerator(_document, Settings.TypeScriptGeneratorSettings, _resolver);

            return(generator.GenerateTypes(_extensionCode));
        }
        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
        }