Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Typescript] Enums generation (7.0.0) #14663

Merged
merged 3 commits into from
Feb 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import io.swagger.v3.oas.models.parameters.Parameter;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.CodegenConstants.ENUM_PROPERTY_NAMING_TYPE;
import org.openapitools.codegen.CodegenDiscriminator.MappedModel;
import org.openapitools.codegen.meta.GeneratorMetadata;
import org.openapitools.codegen.meta.Stability;
Expand Down Expand Up @@ -100,6 +101,7 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo
protected String npmName = null;
protected String npmVersion = "1.0.0";
protected String modelPropertyNaming = "camelCase";
protected ENUM_PROPERTY_NAMING_TYPE enumPropertyNaming = ENUM_PROPERTY_NAMING_TYPE.PascalCase;
protected HashSet<String> languageGenericTypes;

private DateTimeFormatter iso8601Date = DateTimeFormatter.ISO_DATE;
Expand Down Expand Up @@ -645,12 +647,12 @@ public String toEnumDefaultValue(String value, String datatype) {
@Override
public String toEnumVarName(String name, String datatype) {
if (name.length() == 0) {
return "Empty";
return getNameUsingEnumPropertyNaming("empty");
}

// for symbol, e.g. $, #
if (getSymbolName(name) != null) {
return camelize(getSymbolName(name));
return getNameUsingEnumPropertyNaming(getSymbolName(name));
}

// number
Expand All @@ -668,9 +670,7 @@ public String toEnumVarName(String name, String datatype) {
enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", "");

// camelize the enum variable name
// ref: https://basarat.gitbooks.io/typescript/content/docs/enums.html
enumName = camelize(enumName);
enumName = getNameUsingEnumPropertyNaming(enumName);

if (enumName.matches("\\d.*")) { // starts with number
return "_" + enumName;
Expand All @@ -679,6 +679,27 @@ public String toEnumVarName(String name, String datatype) {
}
}

protected ENUM_PROPERTY_NAMING_TYPE getEnumPropertyNaming() {
return enumPropertyNaming;
}

private String getNameUsingEnumPropertyNaming(String name) {
switch (getEnumPropertyNaming()) {
case original:
return name;
case camelCase:
return camelize(underscore(name), LOWERCASE_FIRST_LETTER);
case PascalCase:
return camelize(underscore(name));
case snake_case:
return underscore(name);
case UPPERCASE:
return underscore(name).toUpperCase(Locale.ROOT);
default:
throw new IllegalArgumentException("Unsupported enum property naming: '" + name);
}
}

@Override
public String toEnumName(CodegenProperty property) {
String enumName = toModelName(property.name) + "Enum";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,26 @@ export class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{

{{#vars}}
{{#isEnum}}
export type {{classname}}{{enumName}} ={{#allowableValues}}{{#values}} "{{.}}" {{^-last}}|{{/-last}}{{/values}}{{/allowableValues}};
export enum {{classname}}{{enumName}} {
{{#allowableValues}}
{{#enumVars}}
{{name}} = {{{value}}}{{^-last}},{{/-last}}
{{/enumVars}}
{{/allowableValues}}
}
{{/isEnum}}
{{/vars}}

{{/hasEnums}}
{{/isEnum}}
{{#isEnum}}
export type {{classname}} ={{#allowableValues}}{{#values}} "{{.}}" {{^-last}}|{{/-last}}{{/values}}{{/allowableValues}};
export enum {{classname}} {
{{#allowableValues}}
{{#enumVars}}
{{name}} = {{{value}}}{{^-last}},{{/-last}}
{{/enumVars}}
{{/allowableValues}}
}
{{/isEnum}}
{{/model}}
{{/models}}
Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,9 @@ export class Order {
}


export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
export enum OrderStatusEnum {
Placed = 'placed',
Approved = 'approved',
Delivered = 'delivered'
}

Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,9 @@ export class Pet {
}


export type PetStatusEnum = "available" | "pending" | "sold" ;
export enum PetStatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}

Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,10 @@ export class Dog {
}


export type DogBreedEnum = "Dingo" | "Husky" | "Retriever" | "Shepherd" ;
export enum DogBreedEnum {
Dingo = 'Dingo',
Husky = 'Husky',
Retriever = 'Retriever',
Shepherd = 'Shepherd'
}

Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,10 @@ export class DogAllOf {
}


export type DogAllOfBreedEnum = "Dingo" | "Husky" | "Retriever" | "Shepherd" ;
export enum DogAllOfBreedEnum {
Dingo = 'Dingo',
Husky = 'Husky',
Retriever = 'Retriever',
Shepherd = 'Shepherd'
}

Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,8 @@ export class PetByType {
}


export type PetByTypePetTypeEnum = "Cat" | "Dog" ;
export enum PetByTypePetTypeEnum {
Cat = 'Cat',
Dog = 'Dog'
}

Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,8 @@ export class PetsFilteredPatchRequest {
}


export type PetsFilteredPatchRequestPetTypeEnum = "Cat" | "Dog" ;
export enum PetsFilteredPatchRequestPetTypeEnum {
Cat = 'Cat',
Dog = 'Dog'
}

Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,10 @@ export class PetsPatchRequest {
}


export type PetsPatchRequestBreedEnum = "Dingo" | "Husky" | "Retriever" | "Shepherd" ;
export enum PetsPatchRequestBreedEnum {
Dingo = 'Dingo',
Husky = 'Husky',
Retriever = 'Retriever',
Shepherd = 'Shepherd'
}

Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,9 @@ export class Order {
}


export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
export enum OrderStatusEnum {
Placed = 'placed',
Approved = 'approved',
Delivered = 'delivered'
}

Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,9 @@ export class Pet {
}


export type PetStatusEnum = "available" | "pending" | "sold" ;
export enum PetStatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}

Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,9 @@ export class Order {
}


export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
export enum OrderStatusEnum {
Placed = 'placed',
Approved = 'approved',
Delivered = 'delivered'
}

Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,9 @@ export class Pet {
}


export type PetStatusEnum = "available" | "pending" | "sold" ;
export enum PetStatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}

Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,9 @@ export class Order {
}


export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
export enum OrderStatusEnum {
Placed = 'placed',
Approved = 'approved',
Delivered = 'delivered'
}

Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,9 @@ export class Pet {
}


export type PetStatusEnum = "available" | "pending" | "sold" ;
export enum PetStatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}

Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,9 @@ export class Order {
}


export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
export enum OrderStatusEnum {
Placed = 'placed',
Approved = 'approved',
Delivered = 'delivered'
}

Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,9 @@ export class Pet {
}


export type PetStatusEnum = "available" | "pending" | "sold" ;
export enum PetStatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}

Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,9 @@ export class Order {
}


export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
export enum OrderStatusEnum {
Placed = 'placed',
Approved = 'approved',
Delivered = 'delivered'
}

Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,9 @@ export class Pet {
}


export type PetStatusEnum = "available" | "pending" | "sold" ;
export enum PetStatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { expect } from '@esm-bundle/chai';
import { ServerConfiguration, createConfiguration, PetApi, Tag, Pet, ApiException, RequiredError } from 'ts-petstore-client'
import { ServerConfiguration, createConfiguration, PetApi, Tag, Pet, PetStatusEnum, ApiException, RequiredError } from 'ts-petstore-client'
import image from "./pet";

const configuration = createConfiguration({
Expand All @@ -20,7 +20,7 @@ function createPet() {
pet.id = Math.floor(Math.random() * 100000)
pet.name = "PetName"
pet.photoUrls = []
pet.status = 'available'
pet.status = PetStatusEnum.Available
pet.tags = [ tag ]
return pet as Required<Pet>;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ describe("PetApi", () => {
pet.id = Math.floor(Math.random() * 100000)
pet.name = "PetName"
pet.photoUrls = []
pet.status = 'available'
pet.status = petstore.PetStatusEnum.Available
pet.tags = [ tag ]

await petApi.addPet(pet);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ describe("ObjectSerializer", () => {
pet.category = category
pet.name = "PetName"
pet.photoUrls = [ "url", "other url"]
pet.status = "available"
pet.status = petstore.PetStatusEnum.Available
pet.tags = tags

expect(ObjectSerializer.serialize(pet, "Pet", "")).to.deep.equal({
Expand Down Expand Up @@ -187,7 +187,7 @@ describe("ObjectSerializer", () => {
pet.category = category
pet.name = "PetName"
pet.photoUrls = [ "url", "other url"]
pet.status = "available"
pet.status = petstore.PetStatusEnum.Available
pet.tags = tags

const deserialized = ObjectSerializer.deserialize({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const petId = Math.floor(Math.random() * 100000);
pet.id = petId;
pet.name = "PetName";
pet.photoUrls = [];
pet.status = "available";
pet.status = petstore.PetStatusEnum.Available;
pet.tags = [tag];

Deno.test({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const pet = new petstore.Pet()
pet.id = Math.floor(Math.random() * 100000)
pet.name = "PetName"
pet.photoUrls = []
pet.status = 'available'
pet.status = petstore.PetStatusEnum.Available
pet.tags = [ tag ]

QUnit.module("PetApi")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const pet = new petstore.Pet()
pet.id = Math.floor(Math.random() * 100000)
pet.name = "PetName"
pet.photoUrls = []
pet.status = 'available'
pet.status = petstore.PetStatusEnum.Available
pet.tags = [ tag ]

describe("PetApi", () =>{
Expand Down