Skip to content

Commit 4bedcb7

Browse files
authored
[typescript-fetch] Fix infinite recursion with self-referencing discriminator mappings (#21956)
* Add selfReferencingDiscriminatorMapping to ExtendedCodegenModel * Add selfReferencingDiscriminatorMapping to template
1 parent 89b0bc4 commit 4bedcb7

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1499,11 +1499,16 @@ public class ExtendedCodegenModel extends CodegenModel {
14991499
public Set<String> oneOfArrays = new TreeSet<>();
15001500
@Getter @Setter
15011501
public Set<CodegenProperty> oneOfPrimitives = new HashSet<>();
1502-
1502+
@Getter @Setter
1503+
public CodegenDiscriminator.MappedModel selfReferencingDiscriminatorMapping;
1504+
15031505
public boolean isEntity; // Is a model containing an "id" property marked as isUniqueId
15041506
public String returnPassthrough;
15051507
public boolean hasReturnPassthroughVoid;
1506-
1508+
1509+
public boolean hasSelfReferencingDiscriminatorMapping(){
1510+
return selfReferencingDiscriminatorMapping != null;
1511+
}
15071512
public boolean isDateType() {
15081513
return isDate && "Date".equals(dataType);
15091514
}
@@ -1597,6 +1602,15 @@ public ExtendedCodegenModel(CodegenModel cm) {
15971602
this.setAdditionalProperties(cm.getAdditionalProperties());
15981603
this.setIsModel(cm.getIsModel());
15991604
this.setComposedSchemas(cm.getComposedSchemas());
1605+
if (this.discriminator != null) {
1606+
Set<CodegenDiscriminator.MappedModel> mappedModels = this.discriminator.getMappedModels();
1607+
for(CodegenDiscriminator.MappedModel mappedModel : mappedModels) {
1608+
if(mappedModel.getModelName().equals(cm.classname)){
1609+
this.discriminator.getMappedModels().remove(mappedModel);
1610+
this.selfReferencingDiscriminatorMapping=mappedModel;
1611+
}
1612+
}
1613+
}
16001614
}
16011615

16021616
@Override

modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boole
4747
return {{modelName}}FromJSONTyped(json, ignoreDiscriminator);
4848
}
4949
{{/discriminator.mappedModels}}
50+
{{#hasSelfReferencingDiscriminatorMapping}}
51+
if (json['{{discriminator.propertyBaseName}}'] === '{{selfReferencingDiscriminatorMapping.mappingName}}') {
52+
return {{selfReferencingDiscriminatorMapping.modelName}}FromJSONTyped(json, true);
53+
}
54+
{{/hasSelfReferencingDiscriminatorMapping}}
55+
5056
}
5157
{{/discriminator}}
5258
return {

0 commit comments

Comments
 (0)