Skip to content

Commit 6332eab

Browse files
authored
fix(typescript-axios): add trailing commas to as const enums (#23275)
Keep enum object diffs smaller when values are appended.
1 parent 3397d12 commit 6332eab

19 files changed

Lines changed: 128 additions & 92 deletions

File tree

modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ export enum {{operationIdCamelCase}}{{enumName}} {
451451
export const {{operationIdCamelCase}}{{enumName}} = {
452452
{{#allowableValues}}
453453
{{#enumVars}}
454-
{{{name}}}: {{{value}}}{{^-last}},{{/-last}}
454+
{{{name}}}: {{{value}}},
455455
{{/enumVars}}
456456
{{/allowableValues}}
457457
} as const;

modules/openapi-generator/src/main/resources/typescript-axios/modelGeneric.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export const {{enumName}} = {
5353
* {{.}}
5454
*/
5555
{{/enumDescription}}
56-
{{{name}}}: {{{value}}}{{^-last}},{{/-last}}
56+
{{{name}}}: {{{value}}},
5757
{{/enumVars}}
5858
{{/allowableValues}}
5959
} as const;

modules/openapi-generator/src/main/resources/typescript-axios/modelObjectEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export const {{classname}} = {
66
* {{.}}
77
*/
88
{{/enumDescription}}
9-
{{{name}}}: {{{value}}}{{^-last}},{{/-last}}
9+
{{{name}}}: {{{value}}},
1010
{{/enumVars}}
1111
{{/allowableValues}}
1212
} as const;

modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/axios/TypeScriptAxiosClientCodegenTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,40 @@ public void testDeprecatedArrayAttribute() throws Exception {
178178
// Verify the non-deprecated array property 'nicknames' is also present
179179
TestUtils.assertFileContains(file, "'nicknames'?: Array<string>");
180180
}
181+
182+
@Test
183+
public void generatesTrailingCommasInAsConstEnumObjects() throws Exception {
184+
final File output = Files.createTempDirectory("typescript_axios_trailing_commas_").toFile();
185+
output.deleteOnExit();
186+
187+
final CodegenConfigurator configurator = new CodegenConfigurator()
188+
.setGeneratorName("typescript-axios")
189+
.setInputSpec("src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml")
190+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
191+
192+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
193+
final DefaultGenerator generator = new DefaultGenerator();
194+
final List<File> files = generator.opts(clientOptInput).generate();
195+
files.forEach(File::deleteOnExit);
196+
197+
Path file = Paths.get(output + "/api.ts");
198+
String content = Files.readString(file);
199+
200+
assertThat(content).contains(
201+
"export const ChildCatPetTypeEnum = {\n" +
202+
" ChildCat: 'ChildCat',\n" +
203+
"} as const;");
204+
assertThat(content).contains(
205+
"export const OuterEnum = {\n" +
206+
" Placed: 'placed',\n" +
207+
" Approved: 'approved',\n" +
208+
" Delivered: 'delivered',\n" +
209+
"} as const;");
210+
assertThat(content).contains(
211+
"export const TestEnumParametersEnumHeaderStringEnum = {\n" +
212+
" Abc: '_abc',\n" +
213+
" Efg: '-efg',\n" +
214+
" Xyz: '(xyz)',\n" +
215+
"} as const;");
216+
}
181217
}

samples/client/echo_api/typescript-axios/build/api.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export interface DefaultValue {
6464
export const DefaultValueArrayStringEnumDefaultEnum = {
6565
Success: 'success',
6666
Failure: 'failure',
67-
Unclassified: 'unclassified'
67+
Unclassified: 'unclassified',
6868
} as const;
6969

7070
export type DefaultValueArrayStringEnumDefaultEnum = typeof DefaultValueArrayStringEnumDefaultEnum[keyof typeof DefaultValueArrayStringEnumDefaultEnum];
@@ -89,7 +89,7 @@ export interface Pet {
8989
export const PetStatusEnum = {
9090
Available: 'available',
9191
Pending: 'pending',
92-
Sold: 'sold'
92+
Sold: 'sold',
9393
} as const;
9494

9595
export type PetStatusEnum = typeof PetStatusEnum[keyof typeof PetStatusEnum];
@@ -105,7 +105,7 @@ export interface Query {
105105
export const QueryOutcomesEnum = {
106106
Success: 'SUCCESS',
107107
Failure: 'FAILURE',
108-
Skipped: 'SKIPPED'
108+
Skipped: 'SKIPPED',
109109
} as const;
110110

111111
export type QueryOutcomesEnum = typeof QueryOutcomesEnum[keyof typeof QueryOutcomesEnum];
@@ -114,7 +114,7 @@ export type QueryOutcomesEnum = typeof QueryOutcomesEnum[keyof typeof QueryOutco
114114
export const StringEnumRef = {
115115
Success: 'success',
116116
Failure: 'failure',
117-
Unclassified: 'unclassified'
117+
Unclassified: 'unclassified',
118118
} as const;
119119

120120
export type StringEnumRef = typeof StringEnumRef[keyof typeof StringEnumRef];
@@ -1454,7 +1454,7 @@ export class HeaderApi extends BaseAPI {
14541454
export const TestHeaderIntegerBooleanStringEnumsEnumNonrefStringHeaderEnum = {
14551455
Success: 'success',
14561456
Failure: 'failure',
1457-
Unclassified: 'unclassified'
1457+
Unclassified: 'unclassified',
14581458
} as const;
14591459
export type TestHeaderIntegerBooleanStringEnumsEnumNonrefStringHeaderEnum = typeof TestHeaderIntegerBooleanStringEnumsEnumNonrefStringHeaderEnum[keyof typeof TestHeaderIntegerBooleanStringEnumsEnumNonrefStringHeaderEnum];
14601460

@@ -1582,7 +1582,7 @@ export class PathApi extends BaseAPI {
15821582
export const TestsPathStringPathStringIntegerPathIntegerEnumNonrefStringPathEnumRefStringPathEnumNonrefStringPathEnum = {
15831583
Success: 'success',
15841584
Failure: 'failure',
1585-
Unclassified: 'unclassified'
1585+
Unclassified: 'unclassified',
15861586
} as const;
15871587
export type TestsPathStringPathStringIntegerPathIntegerEnumNonrefStringPathEnumRefStringPathEnumNonrefStringPathEnum = typeof TestsPathStringPathStringIntegerPathIntegerEnumNonrefStringPathEnumRefStringPathEnumNonrefStringPathEnum[keyof typeof TestsPathStringPathStringIntegerPathIntegerEnumNonrefStringPathEnumRefStringPathEnumNonrefStringPathEnum];
15881588

@@ -2442,7 +2442,7 @@ export class QueryApi extends BaseAPI {
24422442
export const TestEnumRefStringEnumNonrefStringQueryEnum = {
24432443
Success: 'success',
24442444
Failure: 'failure',
2445-
Unclassified: 'unclassified'
2445+
Unclassified: 'unclassified',
24462446
} as const;
24472447
export type TestEnumRefStringEnumNonrefStringQueryEnum = typeof TestEnumRefStringEnumNonrefStringQueryEnum[keyof typeof TestEnumRefStringEnumNonrefStringQueryEnum];
24482448

samples/client/petstore/typescript-axios/builds/composed-schemas/api.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const DogBreedEnum = {
3939
Dingo: 'Dingo',
4040
Husky: 'Husky',
4141
Retriever: 'Retriever',
42-
Shepherd: 'Shepherd'
42+
Shepherd: 'Shepherd',
4343
} as const;
4444

4545
export type DogBreedEnum = typeof DogBreedEnum[keyof typeof DogBreedEnum];
@@ -58,7 +58,7 @@ export interface PetByType {
5858

5959
export const PetByTypePetTypeEnum = {
6060
Cat: 'Cat',
61-
Dog: 'Dog'
61+
Dog: 'Dog',
6262
} as const;
6363

6464
export type PetByTypePetTypeEnum = typeof PetByTypePetTypeEnum[keyof typeof PetByTypePetTypeEnum];
@@ -72,7 +72,7 @@ export interface PetsFilteredPatchRequest {
7272

7373
export const PetsFilteredPatchRequestPetTypeEnum = {
7474
Cat: 'Cat',
75-
Dog: 'Dog'
75+
Dog: 'Dog',
7676
} as const;
7777

7878
export type PetsFilteredPatchRequestPetTypeEnum = typeof PetsFilteredPatchRequestPetTypeEnum[keyof typeof PetsFilteredPatchRequestPetTypeEnum];

samples/client/petstore/typescript-axios/builds/default/api.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export interface Order {
5656
export const OrderStatusEnum = {
5757
Placed: 'placed',
5858
Approved: 'approved',
59-
Delivered: 'delivered'
59+
Delivered: 'delivered',
6060
} as const;
6161

6262
export type OrderStatusEnum = typeof OrderStatusEnum[keyof typeof OrderStatusEnum];
@@ -79,7 +79,7 @@ export interface Pet {
7979
export const PetStatusEnum = {
8080
Available: 'available',
8181
Pending: 'pending',
82-
Sold: 'sold'
82+
Sold: 'sold',
8383
} as const;
8484

8585
export type PetStatusEnum = typeof PetStatusEnum[keyof typeof PetStatusEnum];
@@ -770,7 +770,7 @@ export class PetApi extends BaseAPI {
770770
export const FindPetsByStatusStatusEnum = {
771771
Available: 'available',
772772
Pending: 'pending',
773-
Sold: 'sold'
773+
Sold: 'sold',
774774
} as const;
775775
export type FindPetsByStatusStatusEnum = typeof FindPetsByStatusStatusEnum[keyof typeof FindPetsByStatusStatusEnum];
776776

samples/client/petstore/typescript-axios/builds/es6-target/api.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export interface Order {
5656
export const OrderStatusEnum = {
5757
Placed: 'placed',
5858
Approved: 'approved',
59-
Delivered: 'delivered'
59+
Delivered: 'delivered',
6060
} as const;
6161

6262
export type OrderStatusEnum = typeof OrderStatusEnum[keyof typeof OrderStatusEnum];
@@ -79,7 +79,7 @@ export interface Pet {
7979
export const PetStatusEnum = {
8080
Available: 'available',
8181
Pending: 'pending',
82-
Sold: 'sold'
82+
Sold: 'sold',
8383
} as const;
8484

8585
export type PetStatusEnum = typeof PetStatusEnum[keyof typeof PetStatusEnum];
@@ -770,7 +770,7 @@ export class PetApi extends BaseAPI {
770770
export const FindPetsByStatusStatusEnum = {
771771
Available: 'available',
772772
Pending: 'pending',
773-
Sold: 'sold'
773+
Sold: 'sold',
774774
} as const;
775775
export type FindPetsByStatusStatusEnum = typeof FindPetsByStatusStatusEnum[keyof typeof FindPetsByStatusStatusEnum];
776776

0 commit comments

Comments
 (0)