From 3036d8fd20cee5bc313f40e93416dd8eda033b84 Mon Sep 17 00:00:00 2001 From: Tim <4960530+fantavlik@users.noreply.github.com> Date: Wed, 10 Apr 2019 09:58:07 -0700 Subject: [PATCH] [TypeScript-Fetch] Generate oneOf schemas as type unions (#2617) * Generate oneOf schemas as type unions for typescript-fetch * Adjust oneOf imports to only include refs of oneOf --- .../languages/TypeScriptFetchClientCodegen.java | 10 ++++++++++ .../resources/typescript-fetch/modelOneOf.mustache | 14 ++++++++++++++ .../resources/typescript-fetch/models.mustache | 7 +++++++ 3 files changed, 31 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 8603dc9dbd9..dc7d7165cf0 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,16 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege } } } + if (cm.oneOf.size() > 0) { + // 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; + } } 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 00000000000..11e4f25fba4 --- /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 ff9993dc14c..bb7d43bce3c 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}}