From 081b1c9b377e9d22fae7e00e1694d404ec14b917 Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Fri, 5 Apr 2019 10:16:52 -0700 Subject: [PATCH 1/2] Generate oneOf schemas as type unions for typescript-fetch --- .../languages/TypeScriptFetchClientCodegen.java | 8 ++++++++ .../resources/typescript-fetch/modelOneOf.mustache | 14 ++++++++++++++ .../resources/typescript-fetch/models.mustache | 7 +++++++ 3 files changed, 29 insertions(+) create mode 100644 modules/openapi-generator/src/main/resources/typescript-fetch/modelOneOf.mustache 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 8603dc9dbd93..ac1d9bb03709 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 @@ -165,6 +165,14 @@ public Map postProcessModels(Map objs) { } } } + if (cm.oneOf.size() > 0) { + // For oneOfs we should only need to import the $refs within the oneOf used + // to form the type union + cm.imports = new TreeSet(); + for (String oneOfRef : cm.oneOf) { + cm.imports.add(oneOfRef); + } + } } return objs; diff --git a/modules/openapi-generator/src/main/resources/typescript-fetch/modelOneOf.mustache b/modules/openapi-generator/src/main/resources/typescript-fetch/modelOneOf.mustache new file mode 100644 index 000000000000..11e4f25fba48 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-fetch/modelOneOf.mustache @@ -0,0 +1,14 @@ +{{#hasImports}} +import { + {{#imports}} + {{{.}}}, + {{/imports}} +} from './'; + +{{/hasImports}} +/** + * @type {{classname}}{{#description}} + * {{{description}}}{{/description}} + * @export + */ +export type {{classname}} = {{#oneOf}}{{{.}}}{{^-last}} | {{/-last}}{{/oneOf}}; \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/typescript-fetch/models.mustache b/modules/openapi-generator/src/main/resources/typescript-fetch/models.mustache index ff9993dc14ca..bb7d43bce3cf 100644 --- a/modules/openapi-generator/src/main/resources/typescript-fetch/models.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-fetch/models.mustache @@ -6,7 +6,14 @@ {{>modelEnum}} {{/isEnum}} {{^isEnum}} +{{#oneOf}} +{{#-first}} +{{>modelOneOf}} +{{/-first}} +{{/oneOf}} +{{^oneOf}} {{>modelGeneric}} +{{/oneOf}} {{/isEnum}} {{/model}} {{/models}} From cb1aca58fd0443b098b4bff9661bdcf94a18e9f5 Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Sat, 6 Apr 2019 15:11:12 -0700 Subject: [PATCH 2/2] Adjust oneOf imports to only include refs of oneOf --- .../languages/TypeScriptFetchClientCodegen.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 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 ac1d9bb03709..dc7d7165cf09 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 @@ -166,12 +166,14 @@ public Map postProcessModels(Map objs) { } } if (cm.oneOf.size() > 0) { - // For oneOfs we should only need to import the $refs within the oneOf used - // to form the type union - cm.imports = new TreeSet(); - for (String oneOfRef : cm.oneOf) { - cm.imports.add(oneOfRef); + // For oneOfs only import $refs within the oneOf + TreeSet oneOfRefs = new TreeSet(); + for (String im : cm.imports) { + if (cm.oneOf.contains(im)) { + oneOfRefs.add(im); + } } + cm.imports = oneOfRefs; } }