diff --git a/example/ts/src/exampleApi.ts b/example/ts/src/exampleApi.ts index 4d98dbf..3f78dd0 100644 --- a/example/ts/src/exampleApi.ts +++ b/example/ts/src/exampleApi.ts @@ -1,7 +1,7 @@ // DO NOT EDIT: generated by fsdgenjs -import { HttpClientUtility, IServiceResult, IHttpClientOptions } from 'facility-core'; -import { IExampleApi, IGetWidgetsRequest, IGetWidgetsResponse, ICreateWidgetRequest, ICreateWidgetResponse, IGetWidgetRequest, IGetWidgetResponse, IDeleteWidgetRequest, IDeleteWidgetResponse, IEditWidgetRequest, IEditWidgetResponse, IGetWidgetBatchRequest, IGetWidgetBatchResponse, IGetWidgetWeightRequest, IGetWidgetWeightResponse, IGetPreferenceRequest, IGetPreferenceResponse, ISetPreferenceRequest, ISetPreferenceResponse, IGetInfoRequest, IGetInfoResponse, INotRestfulRequest, INotRestfulResponse, IKitchenRequest, IKitchenResponse, IWidget, IWidgetJob, IPreference, IObsoleteData, IKitchenSink } from './exampleApiTypes'; +import { HttpClientUtility, IHttpClientOptions, IServiceResult } from 'facility-core'; +import { ICreateWidgetRequest, ICreateWidgetResponse, IDeleteWidgetRequest, IDeleteWidgetResponse, IEditWidgetRequest, IEditWidgetResponse, IExampleApi, IGetInfoRequest, IGetInfoResponse, IGetPreferenceRequest, IGetPreferenceResponse, IGetWidgetBatchRequest, IGetWidgetBatchResponse, IGetWidgetRequest, IGetWidgetResponse, IGetWidgetsRequest, IGetWidgetsResponse, IGetWidgetWeightRequest, IGetWidgetWeightResponse, IKitchenRequest, IKitchenResponse, INotRestfulRequest, INotRestfulResponse, ISetPreferenceRequest, ISetPreferenceResponse } from './exampleApiTypes'; export * from './exampleApiTypes'; /** Provides access to ExampleApi over HTTP via fetch. */ diff --git a/example/ts/src/exampleApiServer.ts b/example/ts/src/exampleApiServer.ts index 207404a..313bb20 100644 --- a/example/ts/src/exampleApiServer.ts +++ b/example/ts/src/exampleApiServer.ts @@ -2,8 +2,7 @@ import * as bodyParser from 'body-parser'; import * as express from 'express'; -import { IServiceResult } from 'facility-core'; -import { IExampleApi, IGetWidgetsRequest, IGetWidgetsResponse, ICreateWidgetRequest, ICreateWidgetResponse, IGetWidgetRequest, IGetWidgetResponse, IDeleteWidgetRequest, IDeleteWidgetResponse, IEditWidgetRequest, IEditWidgetResponse, IGetWidgetBatchRequest, IGetWidgetBatchResponse, IGetWidgetWeightRequest, IGetWidgetWeightResponse, IGetPreferenceRequest, IGetPreferenceResponse, ISetPreferenceRequest, ISetPreferenceResponse, IGetInfoRequest, IGetInfoResponse, INotRestfulRequest, INotRestfulResponse, IKitchenRequest, IKitchenResponse, IWidget, IWidgetJob, IPreference, IObsoleteData, IKitchenSink } from './exampleApiTypes'; +import { ICreateWidgetRequest, IDeleteWidgetRequest, IEditWidgetRequest, IExampleApi, IGetInfoRequest, IGetPreferenceRequest, IGetWidgetBatchRequest, IGetWidgetRequest, IGetWidgetsRequest, IGetWidgetWeightRequest, IKitchenRequest, INotRestfulRequest, ISetPreferenceRequest } from './exampleApiTypes'; export * from './exampleApiTypes'; const standardErrorCodes: { [code: string]: number } = { diff --git a/example/ts/src/exampleApiTypes.ts b/example/ts/src/exampleApiTypes.ts index 4bcfdbf..466f5c6 100644 --- a/example/ts/src/exampleApiTypes.ts +++ b/example/ts/src/exampleApiTypes.ts @@ -1,6 +1,6 @@ // DO NOT EDIT: generated by fsdgenjs -import { IServiceResult, IServiceError } from 'facility-core'; +import { IServiceError, IServiceResult } from 'facility-core'; /** Example service for widgets. */ export interface IExampleApi { diff --git a/src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs b/src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs index b78e44c..c674ef0 100644 --- a/src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs +++ b/src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs @@ -42,7 +42,9 @@ protected override CodeGenOutput GenerateOutputCore(ServiceInfo service) string serverFileName = Uncapitalize(moduleName) + "Server" + (TypeScript ? ".ts" : ".js"); var namedTexts = new List(); - var typeNames = new List(); + var requestTypeNames = new List(); + var responseTypeNames = new List(); + var dtoTypeNames = new List(); if (TypeScript) { namedTexts.Add(CreateFile(typesFileName, code => @@ -61,7 +63,7 @@ protected override CodeGenOutput GenerateOutputCore(ServiceInfo service) code.WriteLine(); WriteJsDoc(code, service); - typeNames.Add($"I{capModuleName}"); + requestTypeNames.Add($"I{capModuleName}"); using (code.Block($"export interface I{capModuleName} {{", "}")) { foreach (var httpMethodInfo in httpServiceInfo.Methods) @@ -77,14 +79,14 @@ protected override CodeGenOutput GenerateOutputCore(ServiceInfo service) foreach (var methodInfo in service.Methods) { var requestDtoName = $"{CodeGenUtility.Capitalize(methodInfo.Name)}Request"; - typeNames.Add($"I{requestDtoName}"); + requestTypeNames.Add($"I{requestDtoName}"); WriteDto(code, new ServiceDtoInfo( name: requestDtoName, fields: methodInfo.RequestFields, summary: $"Request for {CodeGenUtility.Capitalize(methodInfo.Name)}."), service); var responseDtoName = $"{CodeGenUtility.Capitalize(methodInfo.Name)}Response"; - typeNames.Add($"I{responseDtoName}"); + responseTypeNames.Add($"I{responseDtoName}"); WriteDto(code, new ServiceDtoInfo( name: responseDtoName, fields: methodInfo.ResponseFields, @@ -93,7 +95,7 @@ protected override CodeGenOutput GenerateOutputCore(ServiceInfo service) foreach (var dtoInfo in service.Dtos) { - typeNames.Add($"I{dtoInfo.Name}"); + dtoTypeNames.Add($"I{dtoInfo.Name}"); WriteDto(code, dtoInfo, service); } code.WriteLine(); @@ -119,7 +121,7 @@ protected override CodeGenOutput GenerateOutputCore(ServiceInfo service) if (TypeScript) { - WriteImports(code, typeNames, $"./{Uncapitalize(moduleName)}Types"); + WriteImports(code, requestTypeNames.Concat(responseTypeNames).ToList(), $"./{Uncapitalize(moduleName)}Types"); code.WriteLine($"export * from './{Uncapitalize(moduleName)}Types';"); } @@ -314,13 +316,9 @@ protected override CodeGenOutput GenerateOutputCore(ServiceInfo service) code.WriteLine(); code.WriteLine("import * as bodyParser from 'body-parser';"); code.WriteLine("import * as express from 'express';"); - var facilityImports = new List(); - if (TypeScript) - facilityImports.Add("IServiceResult"); - WriteImports(code, facilityImports, "facility-core"); if (TypeScript) { - WriteImports(code, typeNames, $"./{Uncapitalize(moduleName)}Types"); + WriteImports(code, requestTypeNames, $"./{Uncapitalize(moduleName)}Types"); code.WriteLine($"export * from './{Uncapitalize(moduleName)}Types';"); } @@ -628,7 +626,7 @@ private static void WriteJsDoc(CodeWriter code, IReadOnlyList lines) private static void WriteImports(CodeWriter code, IReadOnlyList imports, string from) { if (imports.Count != 0) - code.WriteLine($"import {{ {string.Join(", ", imports)} }} from '{from}';"); + code.WriteLine($"import {{ {string.Join(", ", imports.OrderBy(x => x))} }} from '{from}';"); } private static string Uncapitalize(string value)