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 bdec9ffeffdca4359d7ae31660bd80416f232886..1bdfa1211b83f2cea117a2c10bfb81d8f30ac325 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 @@ -25,6 +25,7 @@ import org.openapitools.codegen.utils.ModelUtils; import java.io.File; import java.text.SimpleDateFormat; +import java.util.TreeSet; import java.util.Date; import java.util.List; import java.util.Locale; @@ -142,6 +143,34 @@ public class TypeScriptFetchClientCodegen extends AbstractTypeScriptClientCodege addImport(codegenModel, codegenModel.additionalPropertiesType); } + @Override + public Map<String, Object> postProcessModels(Map<String, Object> objs) { + // process enum in models + List<Object> models = (List<Object>) postProcessModelsEnum(objs).get("models"); + for (Object _mo : models) { + Map<String, Object> mo = (Map<String, Object>) _mo; + CodegenModel cm = (CodegenModel) mo.get("model"); + cm.imports = new TreeSet(cm.imports); + // name enum with model name, e.g. StatusEnum => Pet.StatusEnum + for (CodegenProperty var : cm.vars) { + if (Boolean.TRUE.equals(var.isEnum)) { + // behaviour for enum names is specific for Typescript Fetch, not using namespaces + var.datatypeWithEnum = var.datatypeWithEnum.replace(var.enumName, cm.classname + var.enumName); + } + } + if (cm.parent != null) { + for (CodegenProperty var : cm.allVars) { + if (Boolean.TRUE.equals(var.isEnum)) { + var.datatypeWithEnum = var.datatypeWithEnum + .replace(var.enumName, cm.classname + var.enumName); + } + } + } + } + + return objs; + } + @Override public Map<String, Object> postProcessAllModels(Map<String, Object> objs) { Map<String, Object> result = super.postProcessAllModels(objs); 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 e4523aadadca87591adf3e80b0728f5ec8851d7a..9bde0bc758e4234cd7196df674f9090028d5caa9 100644 --- a/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache @@ -88,26 +88,22 @@ export function {{classname}}ToJSON(value?: {{classname}}): any { return value; {{/hasVars}} } -{{#hasEnums}} -/** - * @export - * @namespace {{classname}} - */ -export namespace {{classname}} { +{{#hasEnums}} {{#vars}} - {{#isEnum}} - /** - * @export - * @enum {string} - */ - export enum {{enumName}} { - {{#allowableValues}} - {{#enumVars}} - {{{name}}} = {{{value}}}{{^-last}},{{/-last}} - {{/enumVars}} - {{/allowableValues}} - } - {{/isEnum}} +{{#isEnum}} +/** +* @export +* @enum {string} +*/ +export enum {{classname}}{{enumName}} { +{{#allowableValues}} + {{#enumVars}} + {{{name}}} = {{{value}}}{{^-last}},{{/-last}} + {{/enumVars}} +{{/allowableValues}} +} +{{/isEnum}} {{/vars}} -}{{/hasEnums}} + +{{/hasEnums}} \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/default/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/default/models/Order.ts index 6a77a95173d4052b6ea8a8a29b6fc5e112ed3c9a..7b16f43c4d56766bf7e419bd4ad61087e91fd83d 100644 --- a/samples/client/petstore/typescript-fetch/builds/default/models/Order.ts +++ b/samples/client/petstore/typescript-fetch/builds/default/models/Order.ts @@ -47,7 +47,7 @@ export interface Order { * @type {string} * @memberof Order */ - status?: Order.StatusEnum; + status?: OrderStatusEnum; /** * * @type {boolean} @@ -82,18 +82,13 @@ export function OrderToJSON(value?: Order): any { } /** - * @export - * @namespace Order - */ -export namespace Order { - /** - * @export - * @enum {string} - */ - export enum StatusEnum { - Placed = 'placed', - Approved = 'approved', - Delivered = 'delivered' - } +* @export +* @enum {string} +*/ +export enum OrderStatusEnum { + Placed = 'placed', + Approved = 'approved', + Delivered = 'delivered' } + diff --git a/samples/client/petstore/typescript-fetch/builds/default/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/default/models/Pet.ts index 7090b2fab2e7152983f59a2cf3b3f7e1a9d2116f..756b3514ec500af67bc6d1fe3221365978985076 100644 --- a/samples/client/petstore/typescript-fetch/builds/default/models/Pet.ts +++ b/samples/client/petstore/typescript-fetch/builds/default/models/Pet.ts @@ -62,7 +62,7 @@ export interface Pet { * @type {string} * @memberof Pet */ - status?: Pet.StatusEnum; + status?: PetStatusEnum; } export function PetFromJSON(json: any): Pet { @@ -91,18 +91,13 @@ export function PetToJSON(value?: Pet): any { } /** - * @export - * @namespace Pet - */ -export namespace Pet { - /** - * @export - * @enum {string} - */ - export enum StatusEnum { - Available = 'available', - Pending = 'pending', - Sold = 'sold' - } +* @export +* @enum {string} +*/ +export enum PetStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' } + diff --git a/samples/client/petstore/typescript-fetch/builds/es6-target/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/es6-target/models/Order.ts index 6a77a95173d4052b6ea8a8a29b6fc5e112ed3c9a..7b16f43c4d56766bf7e419bd4ad61087e91fd83d 100644 --- a/samples/client/petstore/typescript-fetch/builds/es6-target/models/Order.ts +++ b/samples/client/petstore/typescript-fetch/builds/es6-target/models/Order.ts @@ -47,7 +47,7 @@ export interface Order { * @type {string} * @memberof Order */ - status?: Order.StatusEnum; + status?: OrderStatusEnum; /** * * @type {boolean} @@ -82,18 +82,13 @@ export function OrderToJSON(value?: Order): any { } /** - * @export - * @namespace Order - */ -export namespace Order { - /** - * @export - * @enum {string} - */ - export enum StatusEnum { - Placed = 'placed', - Approved = 'approved', - Delivered = 'delivered' - } +* @export +* @enum {string} +*/ +export enum OrderStatusEnum { + Placed = 'placed', + Approved = 'approved', + Delivered = 'delivered' } + diff --git a/samples/client/petstore/typescript-fetch/builds/es6-target/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/es6-target/models/Pet.ts index 7090b2fab2e7152983f59a2cf3b3f7e1a9d2116f..756b3514ec500af67bc6d1fe3221365978985076 100644 --- a/samples/client/petstore/typescript-fetch/builds/es6-target/models/Pet.ts +++ b/samples/client/petstore/typescript-fetch/builds/es6-target/models/Pet.ts @@ -62,7 +62,7 @@ export interface Pet { * @type {string} * @memberof Pet */ - status?: Pet.StatusEnum; + status?: PetStatusEnum; } export function PetFromJSON(json: any): Pet { @@ -91,18 +91,13 @@ export function PetToJSON(value?: Pet): any { } /** - * @export - * @namespace Pet - */ -export namespace Pet { - /** - * @export - * @enum {string} - */ - export enum StatusEnum { - Available = 'available', - Pending = 'pending', - Sold = 'sold' - } +* @export +* @enum {string} +*/ +export enum PetStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' } + diff --git a/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Order.ts index 6a77a95173d4052b6ea8a8a29b6fc5e112ed3c9a..7b16f43c4d56766bf7e419bd4ad61087e91fd83d 100644 --- a/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Order.ts +++ b/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Order.ts @@ -47,7 +47,7 @@ export interface Order { * @type {string} * @memberof Order */ - status?: Order.StatusEnum; + status?: OrderStatusEnum; /** * * @type {boolean} @@ -82,18 +82,13 @@ export function OrderToJSON(value?: Order): any { } /** - * @export - * @namespace Order - */ -export namespace Order { - /** - * @export - * @enum {string} - */ - export enum StatusEnum { - Placed = 'placed', - Approved = 'approved', - Delivered = 'delivered' - } +* @export +* @enum {string} +*/ +export enum OrderStatusEnum { + Placed = 'placed', + Approved = 'approved', + Delivered = 'delivered' } + diff --git a/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Pet.ts index 7090b2fab2e7152983f59a2cf3b3f7e1a9d2116f..756b3514ec500af67bc6d1fe3221365978985076 100644 --- a/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Pet.ts +++ b/samples/client/petstore/typescript-fetch/builds/with-interfaces/models/Pet.ts @@ -62,7 +62,7 @@ export interface Pet { * @type {string} * @memberof Pet */ - status?: Pet.StatusEnum; + status?: PetStatusEnum; } export function PetFromJSON(json: any): Pet { @@ -91,18 +91,13 @@ export function PetToJSON(value?: Pet): any { } /** - * @export - * @namespace Pet - */ -export namespace Pet { - /** - * @export - * @enum {string} - */ - export enum StatusEnum { - Available = 'available', - Pending = 'pending', - Sold = 'sold' - } +* @export +* @enum {string} +*/ +export enum PetStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' } + diff --git a/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Order.ts index 6a77a95173d4052b6ea8a8a29b6fc5e112ed3c9a..7b16f43c4d56766bf7e419bd4ad61087e91fd83d 100644 --- a/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Order.ts +++ b/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Order.ts @@ -47,7 +47,7 @@ export interface Order { * @type {string} * @memberof Order */ - status?: Order.StatusEnum; + status?: OrderStatusEnum; /** * * @type {boolean} @@ -82,18 +82,13 @@ export function OrderToJSON(value?: Order): any { } /** - * @export - * @namespace Order - */ -export namespace Order { - /** - * @export - * @enum {string} - */ - export enum StatusEnum { - Placed = 'placed', - Approved = 'approved', - Delivered = 'delivered' - } +* @export +* @enum {string} +*/ +export enum OrderStatusEnum { + Placed = 'placed', + Approved = 'approved', + Delivered = 'delivered' } + diff --git a/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Pet.ts index 7090b2fab2e7152983f59a2cf3b3f7e1a9d2116f..756b3514ec500af67bc6d1fe3221365978985076 100644 --- a/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Pet.ts +++ b/samples/client/petstore/typescript-fetch/builds/with-npm-version/models/Pet.ts @@ -62,7 +62,7 @@ export interface Pet { * @type {string} * @memberof Pet */ - status?: Pet.StatusEnum; + status?: PetStatusEnum; } export function PetFromJSON(json: any): Pet { @@ -91,18 +91,13 @@ export function PetToJSON(value?: Pet): any { } /** - * @export - * @namespace Pet - */ -export namespace Pet { - /** - * @export - * @enum {string} - */ - export enum StatusEnum { - Available = 'available', - Pending = 'pending', - Sold = 'sold' - } +* @export +* @enum {string} +*/ +export enum PetStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' } + diff --git a/samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts b/samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts index 827cc99303c1f63d4839617b6439c860e3cca2fe..c452573699d5391b2fe5850c418b7dc4908ccd43 100644 --- a/samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts +++ b/samples/client/petstore/typescript-fetch/tests/default/test/PetApi.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { PetApi, Pet, Category } from '@swagger/typescript-fetch-petstore'; +import { PetApi, Pet, PetStatusEnum, Category } from '@swagger/typescript-fetch-petstore'; import { config } from '../configuration'; describe('PetApi', () => { @@ -67,7 +67,7 @@ function createTestFixture(ts = Date.now()) { 'name': `pet${ts}`, 'category': category, 'photoUrls': ['http://foo.bar.com/1', 'http://foo.bar.com/2'], - 'status': Pet.StatusEnum.Available, + 'status': PetStatusEnum.Available, 'tags': [] };