Skip to content

Commit

Permalink
[Typescript] Enums generation (7.0.0) (#14663)
Browse files Browse the repository at this point in the history
* Enums generation

* regenerate tests

* Update tests
  • Loading branch information
ksvirkou-hubspot committed Feb 19, 2023
1 parent 8db004f commit fb18e7a
Show file tree
Hide file tree
Showing 25 changed files with 134 additions and 32 deletions.
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

0 comments on commit fb18e7a

Please sign in to comment.