From 537b3854307917ef3badad770762cceb231c2076 Mon Sep 17 00:00:00 2001 From: Simon Ermler Date: Fri, 12 Sep 2025 13:59:48 +0200 Subject: [PATCH 1/2] Add selfReferencingDiscriminatorMapping to ExtendedCodegenModel --- .../TypeScriptFetchClientCodegen.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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 4c2d3a200e5e..a5233738ace1 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 @@ -1499,11 +1499,16 @@ public class ExtendedCodegenModel extends CodegenModel { public Set oneOfArrays = new TreeSet<>(); @Getter @Setter public Set oneOfPrimitives = new HashSet<>(); - + @Getter @Setter + public CodegenDiscriminator.MappedModel selfReferencingDiscriminatorMapping; + public boolean isEntity; // Is a model containing an "id" property marked as isUniqueId public String returnPassthrough; public boolean hasReturnPassthroughVoid; - + + public boolean hasSelfReferencingDiscriminatorMapping(){ + return selfReferencingDiscriminatorMapping != null; + } public boolean isDateType() { return isDate && "Date".equals(dataType); } @@ -1597,6 +1602,15 @@ public ExtendedCodegenModel(CodegenModel cm) { this.setAdditionalProperties(cm.getAdditionalProperties()); this.setIsModel(cm.getIsModel()); this.setComposedSchemas(cm.getComposedSchemas()); + if (this.discriminator != null) { + Set mappedModels = this.discriminator.getMappedModels(); + for(CodegenDiscriminator.MappedModel mappedModel : mappedModels) { + if(mappedModel.getModelName().equals(cm.classname)){ + this.discriminator.getMappedModels().remove(mappedModel); + this.selfReferencingDiscriminatorMapping=mappedModel; + } + } + } } @Override From 3ce0885bc7178679a29c9c7a13c2f08ca32d6870 Mon Sep 17 00:00:00 2001 From: Simon Ermler Date: Fri, 12 Sep 2025 14:00:27 +0200 Subject: [PATCH 2/2] Add selfReferencingDiscriminatorMapping to template --- .../main/resources/typescript-fetch/modelGeneric.mustache | 6 ++++++ 1 file changed, 6 insertions(+) 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 cef7f6bd1959..16f2f4336212 100644 --- a/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache @@ -47,6 +47,12 @@ export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boole return {{modelName}}FromJSONTyped(json, ignoreDiscriminator); } {{/discriminator.mappedModels}} + {{#hasSelfReferencingDiscriminatorMapping}} + if (json['{{discriminator.propertyBaseName}}'] === '{{selfReferencingDiscriminatorMapping.mappingName}}') { + return {{selfReferencingDiscriminatorMapping.modelName}}FromJSONTyped(json, true); + } + {{/hasSelfReferencingDiscriminatorMapping}} + } {{/discriminator}} return {