forked from loafle/openapi-generator-original
[Typescript] Enums generation (7.0.0) (#14663)
* Enums generation * regenerate tests * Update tests
This commit is contained in:
@@ -30,6 +30,7 @@ import io.swagger.v3.oas.models.media.Schema;
|
||||
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;
|
||||
@@ -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;
|
||||
@@ -645,12 +647,12 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo
|
||||
@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
|
||||
@@ -668,9 +670,7 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo
|
||||
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;
|
||||
@@ -679,6 +679,27 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo
|
||||
}
|
||||
}
|
||||
|
||||
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";
|
||||
|
||||
@@ -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}}
|
||||
@@ -75,5 +75,9 @@ export class Order {
|
||||
}
|
||||
|
||||
|
||||
export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
|
||||
export enum OrderStatusEnum {
|
||||
Placed = 'placed',
|
||||
Approved = 'approved',
|
||||
Delivered = 'delivered'
|
||||
}
|
||||
|
||||
|
||||
@@ -77,5 +77,9 @@ export class Pet {
|
||||
}
|
||||
|
||||
|
||||
export type PetStatusEnum = "available" | "pending" | "sold" ;
|
||||
export enum PetStatusEnum {
|
||||
Available = 'available',
|
||||
Pending = 'pending',
|
||||
Sold = 'sold'
|
||||
}
|
||||
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
|
||||
@@ -41,5 +41,8 @@ export class PetByType {
|
||||
}
|
||||
|
||||
|
||||
export type PetByTypePetTypeEnum = "Cat" | "Dog" ;
|
||||
export enum PetByTypePetTypeEnum {
|
||||
Cat = 'Cat',
|
||||
Dog = 'Dog'
|
||||
}
|
||||
|
||||
|
||||
@@ -57,5 +57,8 @@ export class PetsFilteredPatchRequest {
|
||||
}
|
||||
|
||||
|
||||
export type PetsFilteredPatchRequestPetTypeEnum = "Cat" | "Dog" ;
|
||||
export enum PetsFilteredPatchRequestPetTypeEnum {
|
||||
Cat = 'Cat',
|
||||
Dog = 'Dog'
|
||||
}
|
||||
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
|
||||
@@ -75,5 +75,9 @@ export class Order {
|
||||
}
|
||||
|
||||
|
||||
export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
|
||||
export enum OrderStatusEnum {
|
||||
Placed = 'placed',
|
||||
Approved = 'approved',
|
||||
Delivered = 'delivered'
|
||||
}
|
||||
|
||||
|
||||
@@ -77,5 +77,9 @@ export class Pet {
|
||||
}
|
||||
|
||||
|
||||
export type PetStatusEnum = "available" | "pending" | "sold" ;
|
||||
export enum PetStatusEnum {
|
||||
Available = 'available',
|
||||
Pending = 'pending',
|
||||
Sold = 'sold'
|
||||
}
|
||||
|
||||
|
||||
@@ -75,5 +75,9 @@ export class Order {
|
||||
}
|
||||
|
||||
|
||||
export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
|
||||
export enum OrderStatusEnum {
|
||||
Placed = 'placed',
|
||||
Approved = 'approved',
|
||||
Delivered = 'delivered'
|
||||
}
|
||||
|
||||
|
||||
@@ -77,5 +77,9 @@ export class Pet {
|
||||
}
|
||||
|
||||
|
||||
export type PetStatusEnum = "available" | "pending" | "sold" ;
|
||||
export enum PetStatusEnum {
|
||||
Available = 'available',
|
||||
Pending = 'pending',
|
||||
Sold = 'sold'
|
||||
}
|
||||
|
||||
|
||||
@@ -75,5 +75,9 @@ export class Order {
|
||||
}
|
||||
|
||||
|
||||
export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
|
||||
export enum OrderStatusEnum {
|
||||
Placed = 'placed',
|
||||
Approved = 'approved',
|
||||
Delivered = 'delivered'
|
||||
}
|
||||
|
||||
|
||||
@@ -77,5 +77,9 @@ export class Pet {
|
||||
}
|
||||
|
||||
|
||||
export type PetStatusEnum = "available" | "pending" | "sold" ;
|
||||
export enum PetStatusEnum {
|
||||
Available = 'available',
|
||||
Pending = 'pending',
|
||||
Sold = 'sold'
|
||||
}
|
||||
|
||||
|
||||
@@ -75,5 +75,9 @@ export class Order {
|
||||
}
|
||||
|
||||
|
||||
export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
|
||||
export enum OrderStatusEnum {
|
||||
Placed = 'placed',
|
||||
Approved = 'approved',
|
||||
Delivered = 'delivered'
|
||||
}
|
||||
|
||||
|
||||
@@ -77,5 +77,9 @@ export class Pet {
|
||||
}
|
||||
|
||||
|
||||
export type PetStatusEnum = "available" | "pending" | "sold" ;
|
||||
export enum PetStatusEnum {
|
||||
Available = 'available',
|
||||
Pending = 'pending',
|
||||
Sold = 'sold'
|
||||
}
|
||||
|
||||
|
||||
@@ -75,5 +75,9 @@ export class Order {
|
||||
}
|
||||
|
||||
|
||||
export type OrderStatusEnum = "placed" | "approved" | "delivered" ;
|
||||
export enum OrderStatusEnum {
|
||||
Placed = 'placed',
|
||||
Approved = 'approved',
|
||||
Delivered = 'delivered'
|
||||
}
|
||||
|
||||
|
||||
@@ -77,5 +77,9 @@ export class Pet {
|
||||
}
|
||||
|
||||
|
||||
export type PetStatusEnum = "available" | "pending" | "sold" ;
|
||||
export enum PetStatusEnum {
|
||||
Available = 'available',
|
||||
Pending = 'pending',
|
||||
Sold = 'sold'
|
||||
}
|
||||
|
||||
|
||||
@@ -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({
|
||||
@@ -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>;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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({
|
||||
@@ -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({
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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", () =>{
|
||||
|
||||
Reference in New Issue
Block a user