diff --git a/Directory.Build.props b/Directory.Build.props index 4499733..248d438 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,7 +1,7 @@ - 2.11.0 + 2.11.1 2.8.0 12.0 enable diff --git a/Directory.Packages.props b/Directory.Packages.props index fb8d6b7..ae712e5 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -3,10 +3,10 @@ true - - + + - + diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 5c5360b..c60f428 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -2,6 +2,10 @@ These are the NuGet package releases. See also [npm Release Notes](ReleaseNotesNpm.md). +## 2.11.1 + +* Ignore events for now. + ## 2.11.0 * Enable use of external enumerations as URI and header request parameters. diff --git a/conformance/ConformanceApi.fsd b/conformance/ConformanceApi.fsd index ff35857..85a03e2 100644 --- a/conformance/ConformanceApi.fsd +++ b/conformance/ConformanceApi.fsd @@ -253,6 +253,15 @@ service ConformanceApi [http(from: body, type: "application/x-output")] content: bytes; } + [http(method: GET)] + event fibonacci + { + count: int32!; + }: + { + value: int32!; + } + data Any { string: string; diff --git a/dotnet-tools.json b/dotnet-tools.json index 9562684..194ceef 100644 --- a/dotnet-tools.json +++ b/dotnet-tools.json @@ -3,10 +3,11 @@ "isRoot": true, "tools": { "facilityconformance": { - "version": "2.21.0", + "version": "2.29.0", "commands": [ "FacilityConformance" - ] + ], + "rollForward": false } } } \ No newline at end of file diff --git a/src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs b/src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs index 6ecc694..b87a317 100644 --- a/src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs +++ b/src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs @@ -1,6 +1,7 @@ using System.Globalization; using Facility.Definition; using Facility.Definition.CodeGen; +using Facility.Definition.Fsd; using Facility.Definition.Http; namespace Facility.CodeGen.JavaScript @@ -13,8 +14,18 @@ public sealed class JavaScriptGenerator : CodeGenerator /// /// Generates JavaScript/TypeScript. /// + /// The parser. /// The settings. /// The number of updated files. + public static int GenerateCSharp(ServiceParser parser, JavaScriptGeneratorSettings settings) => + FileGenerator.GenerateFiles(parser, new JavaScriptGenerator { GeneratorName = nameof(JavaScriptGenerator) }, settings); + + /// + /// Generates JavaScript/TypeScript. + /// + /// The settings. + /// The number of updated files. + [Obsolete("Use the overload that takes a parser.")] public static int GenerateJavaScript(JavaScriptGeneratorSettings settings) => FileGenerator.GenerateFiles(new JavaScriptGenerator { GeneratorName = nameof(JavaScriptGenerator) }, settings); diff --git a/src/fsdgenjs/FsdGenJavaScriptApp.cs b/src/fsdgenjs/FsdGenJavaScriptApp.cs index 06759cc..8d9c62f 100644 --- a/src/fsdgenjs/FsdGenJavaScriptApp.cs +++ b/src/fsdgenjs/FsdGenJavaScriptApp.cs @@ -2,6 +2,7 @@ using Facility.CodeGen.Console; using Facility.CodeGen.JavaScript; using Facility.Definition.CodeGen; +using Facility.Definition.Fsd; namespace fsdgenjs { @@ -30,6 +31,8 @@ public sealed class FsdGenJavaScriptApp : CodeGeneratorApp " Suffix to append to generated file names before the file extension.", ]; + protected override ServiceParser CreateParser() => new FsdParser(new FsdParserSettings { SupportsEvents = true }); + protected override CodeGenerator CreateGenerator() => new JavaScriptGenerator(); protected override FileGeneratorSettings CreateSettings(ArgsReader args) => diff --git a/tests/Facility.CodeGen.JavaScript.UnitTests/JavaScriptGeneratorTests.cs b/tests/Facility.CodeGen.JavaScript.UnitTests/JavaScriptGeneratorTests.cs index d7153ca..752c323 100644 --- a/tests/Facility.CodeGen.JavaScript.UnitTests/JavaScriptGeneratorTests.cs +++ b/tests/Facility.CodeGen.JavaScript.UnitTests/JavaScriptGeneratorTests.cs @@ -15,7 +15,7 @@ public void GenerateExampleApiSuccess(bool typeScript) { ServiceInfo service; const string fileName = "Facility.CodeGen.JavaScript.UnitTests.ExampleApi.fsd"; - var parser = new FsdParser(); + var parser = CreateParser(); var stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(fileName)!; Assert.That(stream, Is.Not.Null); using (var reader = new StreamReader(stream)) @@ -35,7 +35,7 @@ public void GenerateExampleApiTypeScript_IncludesEnums() { ServiceInfo service; const string fileName = "Facility.CodeGen.JavaScript.UnitTests.ExampleApi.fsd"; - var parser = new FsdParser(); + var parser = CreateParser(); var stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(fileName)!; Assert.That(stream, Is.Not.Null); using (var reader = new StreamReader(stream)) @@ -87,7 +87,7 @@ public void GenerateExampleApiTypeScript_DoesntRequireJsonWhenNoResponseBodyExpe { ServiceInfo service; const string fileName = "Facility.CodeGen.JavaScript.UnitTests.ExampleApi.fsd"; - var parser = new FsdParser(); + var parser = CreateParser(); var stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(fileName)!; Assert.That(stream, Is.Not.Null); using (var reader = new StreamReader(stream)) @@ -129,7 +129,7 @@ public void GenerateExampleApiTypeScript_DoesntRequireJsonWhenNoResponseBodyExpe public void GenerateExampleApiTypeScript_ExternDataWithNameAndModuel() { const string definition = "[csharp] service TestApi { [js(name: \"SomeExternalDto\", module: \"extern-dto-module\")] extern data Thing; data Test { thing: Thing; } }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true }; var result = generator.GenerateOutput(service); @@ -160,7 +160,7 @@ public void GenerateExampleApiTypeScript_ExternDataWithoutModule() public void GenerateExampleApiTypeScript_ExternDataWithoutName() { const string definition = "[csharp] service TestApi { [js(module: \"extern-dto-module\")] extern data Thing; data Test { thing: Thing; } }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true }; var result = generator.GenerateOutput(service); @@ -175,7 +175,7 @@ public void GenerateExampleApiTypeScript_ExternDataWithoutName() public void GenerateExampleApiTypeScript_ExternDataNameSameAsAlias() { const string definition = "[csharp] service TestApi { [js(name: \"IThing\", module: \"extern-dto-module\")] extern data Thing; data Test { thing: Thing; } }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true }; var result = generator.GenerateOutput(service); @@ -190,7 +190,7 @@ public void GenerateExampleApiTypeScript_ExternDataNameSameAsAlias() public void GenerateExampleApiTypeScript_ExternEnumWithNameAndModule() { const string definition = "[csharp] service TestApi { [js(name: \"SomeExternalEnum\", module: \"extern-enum-module\")] extern enum Thing; data Test { thing: Thing; } }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true }; var result = generator.GenerateOutput(service); @@ -205,7 +205,7 @@ public void GenerateExampleApiTypeScript_ExternEnumWithNameAndModule() public void GenerateExampleApiTypeScript_ExternEnumAsUriParam() { const string definition = "[csharp] service TestApi { [js(name: \"SomeExternalEnum\", module: \"extern-enum-module\")] extern enum Thing; [http(method: GET, path: \"/myMethod\")] method myMethod { e: Thing; }: {} }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true, Express = true }; var result = generator.GenerateOutput(service); @@ -223,7 +223,7 @@ public void GenerateExampleApiTypeScript_ExternEnumAsUriParam() public void GenerateExampleApiTypeScript_ExternEnumAsHeader() { const string definition = "[csharp] service TestApi { [js(name: \"SomeExternalEnum\", module: \"extern-enum-module\")] extern enum Thing; [http(method: GET, path: \"/myMethod\")] method myMethod { [http(from: header, name: \"Thing-Header\")] e: Thing; }: {} }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true, Express = true }; var result = generator.GenerateOutput(service); @@ -257,7 +257,7 @@ public void GenerateExampleApiTypeScript_ExternEnumWithoutModule() public void GenerateExampleApiTypeScript_ExternEnumWithoutName() { const string definition = "[csharp] service TestApi { [js(module: \"extern-enum-module\")] extern enum Thing; data Test { thing: Thing; } }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true }; var result = generator.GenerateOutput(service); @@ -272,7 +272,7 @@ public void GenerateExampleApiTypeScript_ExternEnumWithoutName() public void GenerateExampleApiTypeScript_ExternEnumNameIsSameAsAlias() { const string definition = "[csharp] service TestApi { [js(name: \"Thing\", module: \"extern-enum-module\")] extern enum Thing; data Test { thing: Thing; } }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true }; var result = generator.GenerateOutput(service); @@ -288,7 +288,7 @@ public void GenerateExampleApiTypeScript_IncludesErrorSets() { ServiceInfo service; const string fileName = "Facility.CodeGen.JavaScript.UnitTests.ExampleApi.fsd"; - var parser = new FsdParser(); + var parser = CreateParser(); var stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(fileName)!; Assert.That(stream, Is.Not.Null); using (var reader = new StreamReader(stream)) @@ -323,7 +323,7 @@ export enum ExampleApiErrors { public void GenerateWithCustomFileNameSuffix(string suffix, bool isTypeScript) { const string definition = "service TestApi { }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = isTypeScript, Express = true, FileNameSuffix = suffix }; var result = generator.GenerateOutput(service); @@ -342,7 +342,7 @@ public void GenerateWithCustomFileNameSuffix(string suffix, bool isTypeScript) public void GenerateWithCustomFileNameSuffix_TypeScriptFileNameReferencesCorrect() { const string definition = "service TestApi { }"; - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true, Express = true, FileNameSuffix = ".g" }; var result = generator.GenerateOutput(service); @@ -357,11 +357,13 @@ public void GenerateWithCustomFileNameSuffix_TypeScriptFileNameReferencesCorrect private void ThrowsServiceDefinitionException(string definition, string message) { - var parser = new FsdParser(); + var parser = CreateParser(); var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true }; Action action = () => generator.GenerateOutput(service); action.Should().Throw().WithMessage(message); } + + private static FsdParser CreateParser() => new FsdParser(new FsdParserSettings { SupportsEvents = true }); } }