diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java index 8ff85cb15607..298c776bdf96 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java @@ -973,6 +973,14 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege return TypeScriptFetchClientCodegen.getItemsDataType(this.items); } + public boolean isDateType() { + return isDate && "Date".equals(dataType); + } + + public boolean isDateTimeType() { + return isDateTime && "Date".equals(dataType); + } + public ExtendedCodegenParameter(CodegenParameter cp) { super(); @@ -1110,6 +1118,14 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege return TypeScriptFetchClientCodegen.getItemsDataType(this.items); } + public boolean isDateType() { + return isDate && "Date".equals(dataType); + } + + public boolean isDateTimeType() { + return isDateTime && "Date".equals(dataType); + } + public ExtendedCodegenProperty(CodegenProperty cp) { super(); @@ -1361,6 +1377,14 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege public String returnPassthrough; public boolean hasReturnPassthroughVoid; + public boolean isDateType() { + return isDate && "Date".equals(dataType); + } + + public boolean isDateTimeType() { + return isDateTime && "Date".equals(dataType); + } + public ExtendedCodegenModel(CodegenModel cm) { super(); diff --git a/modules/openapi-generator/src/main/resources/typescript-fetch/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-fetch/apis.mustache index f494271ad648..24edd4d6ade8 100644 --- a/modules/openapi-generator/src/main/resources/typescript-fetch/apis.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-fetch/apis.mustache @@ -123,17 +123,17 @@ export class {{classname}} extends runtime.BaseAPI { {{/isArray}} {{^isArray}} if (requestParameters.{{paramName}} !== undefined) { - {{#isDateTime}} + {{#isDateTimeType}} queryParameters['{{baseName}}'] = (requestParameters.{{paramName}} as any).toISOString(); - {{/isDateTime}} - {{^isDateTime}} - {{#isDate}} + {{/isDateTimeType}} + {{^isDateTimeType}} + {{#isDateType}} queryParameters['{{baseName}}'] = (requestParameters.{{paramName}} as any).toISOString().substr(0,10); - {{/isDate}} - {{^isDate}} + {{/isDateType}} + {{^isDateType}} queryParameters['{{baseName}}'] = requestParameters.{{paramName}}; - {{/isDate}} - {{/isDateTime}} + {{/isDateType}} + {{/isDateTimeType}} } {{/isArray}} diff --git a/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache b/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache index 9c6ebc44f31b..0d36547cfc2c 100644 --- a/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache @@ -59,17 +59,17 @@ export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boole {{/additionalPropertiesType}} {{#vars}} {{#isPrimitiveType}} - {{#isDate}} + {{#isDateType}} '{{name}}': {{^required}}!exists(json, '{{baseName}}') ? undefined : {{/required}}({{#isNullable}}json['{{baseName}}'] === null ? null : {{/isNullable}}new Date(json['{{baseName}}'])), - {{/isDate}} - {{#isDateTime}} + {{/isDateType}} + {{#isDateTimeType}} '{{name}}': {{^required}}!exists(json, '{{baseName}}') ? undefined : {{/required}}({{#isNullable}}json['{{baseName}}'] === null ? null : {{/isNullable}}new Date(json['{{baseName}}'])), - {{/isDateTime}} - {{^isDate}} - {{^isDateTime}} + {{/isDateTimeType}} + {{^isDateType}} + {{^isDateTimeType}} '{{name}}': {{^required}}!exists(json, '{{baseName}}') ? undefined : {{/required}}json['{{baseName}}'], - {{/isDateTime}} - {{/isDate}} + {{/isDateTimeType}} + {{/isDateType}} {{/isPrimitiveType}} {{^isPrimitiveType}} {{#isArray}} @@ -118,7 +118,7 @@ export function {{classname}}ToJSON(value?: {{classname}} | null): any { {{#vars}} {{^isReadOnly}} {{#isPrimitiveType}} - '{{baseName}}': {{#isDate}}{{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}value.{{name}}.toISOString().substr(0,10)){{/isDate}}{{#isDateTime}}{{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}value.{{name}}.toISOString()){{/isDateTime}}{{^isDate}}{{^isDateTime}}value.{{name}}{{/isDateTime}}{{/isDate}}, + '{{baseName}}': {{#isDateType}}{{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}value.{{name}}.toISOString().substr(0,10)){{/isDateType}}{{#isDateTimeType}}{{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}value.{{name}}.toISOString()){{/isDateTimeType}}{{^isDateType}}{{^isDateTimeType}}value.{{name}}{{/isDateTimeType}}{{/isDateType}}, {{/isPrimitiveType}} {{^isPrimitiveType}} {{#isArray}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchModelTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchModelTest.java index 9bc7c709487a..d1af770e2cd8 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchModelTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchModelTest.java @@ -117,6 +117,76 @@ public class TypeScriptFetchModelTest { Assert.assertFalse(property5.isContainer); } + @Test(description = "convert a simple TypeScript Angular model; overwrite date/DateTime type mapping") + public void simpleModelWithStringDateTest() { + final Schema model = new Schema() + .description("a sample model") + .addProperties("id", new IntegerSchema().format(SchemaTypeUtil.INTEGER64_FORMAT)) + .addProperties("name", new StringSchema()) + .addProperties("createdAt", new DateTimeSchema()) + .addProperties("birthDate", new DateSchema()) + .addProperties("active", new BooleanSchema()) + .addRequiredItem("id") + .addRequiredItem("name"); + + final DefaultCodegen codegen = new TypeScriptFetchClientCodegen(); + OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model); + codegen.setOpenAPI(openAPI); + codegen.typeMapping().put("date", "string"); + codegen.typeMapping().put("DateTime", "string"); + final CodegenModel cm = codegen.fromModel("sample", model); + + Assert.assertEquals(cm.name, "sample"); + Assert.assertEquals(cm.classname, "Sample"); + Assert.assertEquals(cm.description, "a sample model"); + Assert.assertEquals(cm.vars.size(), 5); + + final CodegenProperty property1 = cm.vars.get(0); + Assert.assertEquals(property1.baseName, "id"); + Assert.assertEquals(property1.dataType, "number"); + Assert.assertEquals(property1.name, "id"); + Assert.assertEquals(property1.defaultValue, "undefined"); + Assert.assertEquals(property1.baseType, "number"); + Assert.assertTrue(property1.required); + Assert.assertFalse(property1.isContainer); + + final CodegenProperty property2 = cm.vars.get(1); + Assert.assertEquals(property2.baseName, "name"); + Assert.assertEquals(property2.dataType, "string"); + Assert.assertEquals(property2.name, "name"); + Assert.assertEquals(property2.defaultValue, "undefined"); + Assert.assertEquals(property2.baseType, "string"); + Assert.assertTrue(property2.required); + Assert.assertFalse(property2.isContainer); + + final CodegenProperty property3 = cm.vars.get(2); + Assert.assertEquals(property3.baseName, "createdAt"); + Assert.assertEquals(property3.complexType, null); + Assert.assertEquals(property3.dataType, "string"); + Assert.assertEquals(property3.name, "createdAt"); + Assert.assertEquals(property3.defaultValue, "undefined"); + Assert.assertFalse(property3.required); + Assert.assertFalse(property3.isContainer); + + final CodegenProperty property4 = cm.vars.get(3); + Assert.assertEquals(property4.baseName, "birthDate"); + Assert.assertEquals(property4.complexType, null); + Assert.assertEquals(property4.dataType, "string"); + Assert.assertEquals(property4.name, "birthDate"); + Assert.assertEquals(property4.defaultValue, "undefined"); + Assert.assertFalse(property4.required); + Assert.assertFalse(property4.isContainer); + + final CodegenProperty property5 = cm.vars.get(4); + Assert.assertEquals(property5.baseName, "active"); + Assert.assertEquals(property5.complexType, null); + Assert.assertEquals(property5.dataType, "boolean"); + Assert.assertEquals(property5.name, "active"); + Assert.assertEquals(property5.defaultValue, "undefined"); + Assert.assertFalse(property5.required); + Assert.assertFalse(property5.isContainer); + } + @Test(description = "convert and check default values for a simple TypeScript Angular model") public void simpleModelDefaultValuesTest() throws ParseException { IntegerSchema integerSchema = new IntegerSchema().format(SchemaTypeUtil.INTEGER64_FORMAT);