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 bdec9ffeffdc..1bdfa1211b83 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 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 @@ protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Sc addImport(codegenModel, codegenModel.additionalPropertiesType); } + @Override + public Map postProcessModels(Map objs) { + // process enum in models + List models = (List) postProcessModelsEnum(objs).get("models"); + for (Object _mo : models) { + Map mo = (Map) _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 postProcessAllModels(Map objs) { Map 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 e4523aadadca..9bde0bc758e4 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 6a77a95173d4..7b16f43c4d56 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 7090b2fab2e7..756b3514ec50 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 6a77a95173d4..7b16f43c4d56 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 7090b2fab2e7..756b3514ec50 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 6a77a95173d4..7b16f43c4d56 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 7090b2fab2e7..756b3514ec50 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 6a77a95173d4..7b16f43c4d56 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 7090b2fab2e7..756b3514ec50 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 827cc99303c1..c452573699d5 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': [] };